nx: Unable to execute node ES Modules
Current Behavior
When attempting to execute an ES Module with the @nrwl/node:node executor, we get the error reported in the below Failure Logs section. After debugging, I’ve identified that the issue is because the executor is attempting to require the module, which is of course not supported for ES Modules.
Expected Behavior
The ES Module node.js application should properly execute without errors.
Steps to Reproduce
Pull this repo in order to reproduce.
- Create a new node.js project
nx generate @nrwl/node:app - Update
tsconfig.app.jsonwith the following fields:
"module": "esnext",
"target": "es2020"
- Update
project.jsonbuildtarget to use executor@nrwl/node:webpack - Update
project.jsonbuildtarget with the following fields
"outputFileName": "main.mjs",
"webpackConfig": "webpack.config.js"
- Update
project.jsonservetarget to use executor@nrwl/node:node - Create root
webpack.config.jsfile with the following content
module.exports = (config, context) => ({
...config,
experiments: {
...config.experiments,
outputModule: true,
topLevelAwait: true,
},
output: {
path: config.output.path,
chunkFormat: 'module',
library: {
type: 'module',
},
},
})
Failure Logs
/app/node_modules/@nrwl/node/src/executors/node/node-with-require-overrides.js:16
return originalLoader.apply(this, arguments);
^
Error [ERR_REQUIRE_ESM]: require() of ES Module /app/dist/packages/test/main.mjs not supported.
Instead change the require of /app/dist/packages/test/main.mjs to a dynamic import() which is available in all CommonJS modules.
at Function.Module._load (/app/node_modules/@nrwl/node/src/executors/node/node-with-require-overrides.js:16:31)
at Object.<anonymous> (/app/node_modules/@nrwl/node/src/executors/node/node-with-require-overrides.js:19:1)
Environment
$ nx report
> NX Report complete - copy this into the issue template
Node : 16.13.0
OS : darwin x64
npm : 8.1.0
nx : 14.1.7
@nrwl/angular : Not Found
@nrwl/cypress : Not Found
@nrwl/detox : Not Found
@nrwl/devkit : 14.1.7
@nrwl/eslint-plugin-nx : 14.1.7
@nrwl/express : Not Found
@nrwl/jest : 14.1.7
@nrwl/js : 14.1.7
@nrwl/linter : 14.1.7
@nrwl/nest : 14.1.7
@nrwl/next : Not Found
@nrwl/node : 14.1.7
@nrwl/nx-cloud : 14.0.3
@nrwl/nx-plugin : Not Found
@nrwl/react : Not Found
@nrwl/react-native : Not Found
@nrwl/schematics : Not Found
@nrwl/storybook : Not Found
@nrwl/web : Not Found
@nrwl/workspace : 14.1.7
typescript : 4.3.5
rxjs : 7.2.0
---------------------------------------
Community plugins:
About this issue
- Original URL
- State: closed
- Created 2 years ago
- Reactions: 15
- Comments: 15 (4 by maintainers)
The same error for the bundle: Nest + Angular 15 + NG Universal.
Fully agree with it((
My whole project is halted because of this issue, and I’ve been seriously thinking of moving from NX to something else! Only the migration pain is what’s holding me from pulling the trigger now. I’ll probably just do it next couple of days, and move on!
Still an issue.
@bulldog98 I tried changing
\node_modules\@nrwl\js\src\executors\node\node-with-require-overrides.jsto usedynamicImportas in #10414Sadly, I’m still getting the same error! I’m not sure if I’m doing something wrong!
I am getting the same error trying to migrate a project that depends on
lodash-esto use the@nrwl/node:nodeexecutor in Nx 14.3.2. I have made the changes in step 1-6 in the Steps to Reproduce and modifiednode-with-require-overrides.jsin my localnode_moduleswith the changes in this PR but still get the same error. Any troubleshooting advice?This is fixed by #10414