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.

  1. Create a new node.js project nx generate @nrwl/node:app
  2. Update tsconfig.app.json with the following fields:
"module": "esnext",
"target": "es2020"
  1. Update project.json build target to use executor @nrwl/node:webpack
  2. Update project.json build target with the following fields
"outputFileName": "main.mjs",
"webpackConfig": "webpack.config.js"
  1. Update project.json serve target to use executor @nrwl/node:node
  2. Create root webpack.config.js file 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)

Most upvoted comments

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!

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.js to use dynamicImport as in #10414

Sadly, 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-es to use the @nrwl/node:node executor in Nx 14.3.2. I have made the changes in step 1-6 in the Steps to Reproduce and modified node-with-require-overrides.js in my local node_modules with the changes in this PR but still get the same error. Any troubleshooting advice?

This is fixed by #10414