diff --git a/e2e/node/src/node-esbuild.test.ts b/e2e/node/src/node-esbuild.test.ts index da62589510..4eeaf5e534 100644 --- a/e2e/node/src/node-esbuild.test.ts +++ b/e2e/node/src/node-esbuild.test.ts @@ -3,8 +3,11 @@ import { checkFilesExist, cleanupProject, newProject, + promisifiedTreeKill, + readFile, runCLI, runCLIAsync, + runCommandUntil, tmpProjPath, uniq, updateFile, @@ -24,12 +27,21 @@ describe('Node Applications + esbuild', () => { checkFilesDoNotExist(`apps/${app}/webpack.config.js`); updateFile(`apps/${app}/src/main.ts`, `console.log('Hello World!');`); - await runCLIAsync(`build ${app}`); + const p = await runCommandUntil(`serve ${app} --watch=false`, (output) => { + process.stdout.write(output); + return output.includes(`Hello World!`); + }); checkFilesExist(`dist/apps/${app}/main.js`); - const result = execSync(`node dist/apps/${app}/main.js`, { - cwd: tmpProjPath(), - }).toString(); - expect(result).toMatch(/Hello World!/); + + // Check that updating the file won't trigger a rebuild since --watch=false. + updateFile(`apps/${app}/src/main.ts`, `console.log('Bye1');`); + await new Promise((res) => setTimeout(res, 2000)); + + expect(readFile(`dist/apps/${app}/apps/${app}/src/main.js`)).not.toContain( + `Bye!` + ); + + await promisifiedTreeKill(p.pid, 'SIGKILL'); }, 300_000); }); diff --git a/packages/js/src/executors/node/node.impl.ts b/packages/js/src/executors/node/node.impl.ts index 04322dc996..562d498b6f 100644 --- a/packages/js/src/executors/node/node.impl.ts +++ b/packages/js/src/executors/node/node.impl.ts @@ -213,46 +213,48 @@ export async function* nodeExecutor( tasks.push(task); }; - const stopWatch = await daemonClient.registerFileWatcher( - { - watchProjects: [context.projectName], - includeDependentProjects: true, - }, - async (err, data) => { - if (err === 'closed') { - logger.error(`Watch error: Daemon closed the connection`); - process.exit(1); - } else if (err) { - logger.error(`Watch error: ${err?.message ?? 'Unknown'}`); - } else { - logger.info(`NX File change detected. Restarting...`); - await addToQueue(); - await debouncedProcessQueue(); + if (options.watch) { + const stopWatch = await daemonClient.registerFileWatcher( + { + watchProjects: [context.projectName], + includeDependentProjects: true, + }, + async (err, data) => { + if (err === 'closed') { + logger.error(`Watch error: Daemon closed the connection`); + process.exit(1); + } else if (err) { + logger.error(`Watch error: ${err?.message ?? 'Unknown'}`); + } else { + logger.info(`NX File change detected. Restarting...`); + await addToQueue(); + await debouncedProcessQueue(); + } } - } - ); + ); - const stopAllTasks = (signal: NodeJS.Signals = 'SIGTERM') => { - for (const task of tasks) { - task.stop(signal); - } - }; + const stopAllTasks = (signal: NodeJS.Signals = 'SIGTERM') => { + for (const task of tasks) { + task.stop(signal); + } + }; - process.on('SIGTERM', async () => { - stopWatch(); - stopAllTasks('SIGTERM'); - process.exit(128 + 15); - }); - process.on('SIGINT', async () => { - stopWatch(); - stopAllTasks('SIGINT'); - process.exit(128 + 2); - }); - process.on('SIGHUP', async () => { - stopWatch(); - stopAllTasks('SIGHUP'); - process.exit(128 + 1); - }); + process.on('SIGTERM', async () => { + stopWatch(); + stopAllTasks('SIGTERM'); + process.exit(128 + 15); + }); + process.on('SIGINT', async () => { + stopWatch(); + stopAllTasks('SIGINT'); + process.exit(128 + 2); + }); + process.on('SIGHUP', async () => { + stopWatch(); + stopAllTasks('SIGHUP'); + process.exit(128 + 1); + }); + } await addToQueue(); await processQueue();