diff --git a/CHANGELOG.md b/CHANGELOG.md index d32a347b0ab0..e99e42066b2f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Support PostCSS `Document` nodes ([#7291](https://github.com/tailwindlabs/tailwindcss/pull/7291)) - Add `text-start` and `text-end` utilities ([#6656](https://github.com/tailwindlabs/tailwindcss/pull/6656)) - Support customizing class name when using `darkMode: 'class'` ([#5800](https://github.com/tailwindlabs/tailwindcss/pull/5800)) +- Add `--poll` option to the CLI ([#7725](https://github.com/tailwindlabs/tailwindcss/pull/7725)) ## [3.0.23] - 2022-02-16 diff --git a/integrations/tailwindcss-cli/tests/cli.test.js b/integrations/tailwindcss-cli/tests/cli.test.js index 0cafb4a7bde1..644ebf2267cd 100644 --- a/integrations/tailwindcss-cli/tests/cli.test.js +++ b/integrations/tailwindcss-cli/tests/cli.test.js @@ -291,6 +291,7 @@ describe('Build command', () => { -i, --input Input file -o, --output Output file -w, --watch Watch for changes and rebuild as needed + -p, --poll Use polling instead of filesystem events when watching --content Content paths to use for removing unused classes --postcss Load custom PostCSS configuration -m, --minify Minify the output diff --git a/src/cli.js b/src/cli.js index 7f3fc8dd3d34..8aee860a870f 100644 --- a/src/cli.js +++ b/src/cli.js @@ -161,6 +161,10 @@ let commands = { '--input': { type: String, description: 'Input file' }, '--output': { type: String, description: 'Output file' }, '--watch': { type: Boolean, description: 'Watch for changes and rebuild as needed' }, + '--poll': { + type: Boolean, + description: 'Use polling instead of filesystem events when watching', + }, '--content': { type: String, description: 'Content paths to use for removing unused classes', @@ -187,6 +191,7 @@ let commands = { '-o': '--output', '-m': '--minify', '-w': '--watch', + '-p': '--poll', }, }, } @@ -367,8 +372,14 @@ async function build() { let input = args['--input'] let output = args['--output'] let shouldWatch = args['--watch'] + let shouldPoll = args['--poll'] + let shouldCoalesceWriteEvents = shouldPoll || process.platform === 'win32' let includePostCss = args['--postcss'] + // Polling interval in milliseconds + // Used only when polling or coalescing add/change events on Windows + let pollInterval = 10 + // TODO: Deprecate this in future versions if (!input && args['_'][1]) { console.error('[deprecation] Running tailwindcss without -i, please provide an input file.') @@ -746,14 +757,15 @@ async function build() { } watcher = chokidar.watch([...contextDependencies, ...extractFileGlobs(config)], { + usePolling: shouldPoll, + interval: shouldPoll ? pollInterval : undefined, ignoreInitial: true, - awaitWriteFinish: - process.platform === 'win32' - ? { - stabilityThreshold: 50, - pollInterval: 10, - } - : false, + awaitWriteFinish: shouldCoalesceWriteEvents + ? { + stabilityThreshold: 50, + pollInterval: pollInterval, + } + : false, }) let chain = Promise.resolve()