Skip to content

Commit 89582cf

Browse files
Fix CLI watcher cleanup race
1 parent 2f1cbbf commit 89582cf

File tree

1 file changed

+8
-8
lines changed
  • packages/@tailwindcss-cli/src/commands/build

1 file changed

+8
-8
lines changed

packages/@tailwindcss-cli/src/commands/build/index.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -239,9 +239,9 @@ export async function handle(args: Result<ReturnType<typeof options>>) {
239239

240240
// Watch for changes
241241
if (args['--watch']) {
242-
let cleanupWatchers = await createWatchers(
243-
watchDirectories(scanner),
244-
async function handle(files) {
242+
let cleanupWatchers: (() => Promise<void>)[] = []
243+
cleanupWatchers.push(
244+
await createWatchers(watchDirectories(scanner), async function handle(files) {
245245
try {
246246
// If the only change happened to the output file, then we don't want to
247247
// trigger a rebuild because that will result in an infinite loop.
@@ -304,15 +304,15 @@ export async function handle(args: Result<ReturnType<typeof options>>) {
304304

305305
// Setup new watchers
306306
DEBUG && I.start('Setup new watchers')
307-
let newCleanupWatchers = await createWatchers(watchDirectories(scanner), handle)
307+
let newCleanupFunction = await createWatchers(watchDirectories(scanner), handle)
308308
DEBUG && I.end('Setup new watchers')
309309

310310
// Clear old watchers
311311
DEBUG && I.start('Cleanup old watchers')
312-
await cleanupWatchers()
312+
await Promise.all(cleanupWatchers.splice(0).map((cleanup) => cleanup()))
313313
DEBUG && I.end('Cleanup old watchers')
314314

315-
cleanupWatchers = newCleanupWatchers
315+
cleanupWatchers.push(newCleanupFunction)
316316

317317
// Re-compile the CSS
318318
DEBUG && I.start('Build CSS')
@@ -362,14 +362,14 @@ export async function handle(args: Result<ReturnType<typeof options>>) {
362362
eprintln(err.toString())
363363
}
364364
}
365-
},
365+
}),
366366
)
367367

368368
// Abort the watcher if `stdin` is closed to avoid zombie processes. You can
369369
// disable this behavior with `--watch=always`.
370370
if (args['--watch'] !== 'always') {
371371
process.stdin.on('end', () => {
372-
cleanupWatchers().then(
372+
Promise.all(cleanupWatchers.map((fn) => fn())).then(
373373
() => process.exit(0),
374374
() => process.exit(1),
375375
)

0 commit comments

Comments
 (0)