nx/e2e/vite/src/vite-esm.test.ts

38 lines
1.1 KiB
TypeScript

import {
checkFilesExist,
newProject,
renameFile,
runCLI,
uniq,
updateJson,
} from '@nx/e2e/utils';
// TODO(jack): This test file can be removed when Vite goes ESM-only.
// This test ensures that when CJS is gone from the published `vite` package, Nx will continue to work.
describe('Vite ESM tests', () => {
beforeAll(() => newProject({ unsetProjectNameAndRootFormat: false }));
it('should build with Vite when it is ESM-only', async () => {
const appName = uniq('viteapp');
runCLI(`generate @nx/react:app ${appName} --bundler=vite`);
// .mts file is needed because Nx will transpile .ts files as CJS
renameFile(`${appName}/vite.config.ts`, `${appName}/vite.config.mts`);
// Remove CJS entry point for Vite
updateJson('node_modules/vite/package.json', (json) => {
for (const [key, value] of Object.entries(json.exports['.'])) {
if (typeof value === 'string' && value.endsWith('.cjs')) {
delete json.exports['.'][key];
}
}
return json;
});
runCLI(`build ${appName}`);
checkFilesExist(`dist/${appName}/index.html`);
});
});