104 lines
2.7 KiB
TypeScript
104 lines
2.7 KiB
TypeScript
import {
|
|
checkFilesExist,
|
|
cleanupProject,
|
|
newProject,
|
|
readFile,
|
|
runCLI,
|
|
runCLIAsync,
|
|
runCommandUntil,
|
|
waitUntil,
|
|
tmpProjPath,
|
|
uniq,
|
|
updateFile,
|
|
updateProjectConfig,
|
|
} from '@nx/e2e/utils';
|
|
import { execSync } from 'child_process';
|
|
|
|
describe('Node Applications + webpack', () => {
|
|
beforeEach(() => newProject());
|
|
|
|
afterEach(() => cleanupProject());
|
|
|
|
it('should generate an app using webpack', async () => {
|
|
const app = uniq('nodeapp');
|
|
|
|
runCLI(`generate @nx/node:app ${app} --bundler=webpack --no-interactive`);
|
|
|
|
checkFilesExist(`apps/${app}/webpack.config.js`);
|
|
|
|
updateFile(
|
|
`apps/${app}/src/main.ts`,
|
|
`
|
|
function foo(x: string) {
|
|
return "foo " + x;
|
|
};
|
|
console.log(foo("bar"));
|
|
`
|
|
);
|
|
await runCLIAsync(`build ${app}`);
|
|
|
|
checkFilesExist(`dist/apps/${app}/main.js`);
|
|
// no optimization by default
|
|
const content = readFile(`dist/apps/${app}/main.js`);
|
|
expect(content).toContain('console.log(foo("bar"))');
|
|
|
|
const result = execSync(`node dist/apps/${app}/main.js`, {
|
|
cwd: tmpProjPath(),
|
|
}).toString();
|
|
expect(result).toMatch(/foo bar/);
|
|
|
|
await runCLIAsync(`build ${app} --optimization`);
|
|
const optimizedContent = readFile(`dist/apps/${app}/main.js`);
|
|
expect(optimizedContent).toContain('console.log("foo "+"bar")');
|
|
|
|
// Test that serve can re-run dependency builds.
|
|
const lib = uniq('nodelib');
|
|
runCLI(`generate @nx/js:lib ${lib} --bundler=esbuild --no-interactive`);
|
|
|
|
updateProjectConfig(app, (config) => {
|
|
// Since we read from lib from dist, we should re-build it when lib changes.
|
|
config.targets.build.options.buildLibsFromSource = false;
|
|
config.targets.serve.options.runBuildTargetDependencies = true;
|
|
return config;
|
|
});
|
|
|
|
updateFile(
|
|
`apps/${app}/src/main.ts`,
|
|
`
|
|
import { ${lib} } from '@proj/${lib}';
|
|
console.log('Hello ' + ${lib}());
|
|
`
|
|
);
|
|
|
|
const serveProcess = await runCommandUntil(
|
|
`serve ${app} --watch --runBuildTargetDependencies`,
|
|
(output) => {
|
|
return output.includes(`Hello`);
|
|
}
|
|
);
|
|
|
|
// Update library source and check that it triggers rebuild.
|
|
const terminalOutputs: string[] = [];
|
|
serveProcess.stdout.on('data', (chunk) => {
|
|
const data = chunk.toString();
|
|
terminalOutputs.push(data);
|
|
});
|
|
|
|
updateFile(
|
|
`libs/${lib}/src/index.ts`,
|
|
`export function ${lib}() { return 'should rebuild lib'; }`
|
|
);
|
|
|
|
await waitUntil(
|
|
() => {
|
|
return terminalOutputs.some((output) =>
|
|
output.includes(`should rebuild lib`)
|
|
);
|
|
},
|
|
{ timeout: 30_000, ms: 200 }
|
|
);
|
|
|
|
serveProcess.kill();
|
|
}, 300_000);
|
|
});
|