babel/babel

[Bug]: @babel/register does not load ESM modules from node_modules in node v22

avaly opened this issue · 1 comments

avaly commented

💻

  • Would you like to work on a fix?

How are you using Babel?

@babel/register or @babel/node

Input code

use-npm-package.js:

console.log(require('p-map').default);

use-local-module.js:

console.log(require('./esm.mjs').run());

esm.mjs:

export function run() {
  return 'Hello world!';
}

Configuration file name

No response

Configuration

No Babel config provided.

Current and expected behavior

Loading ESM modules from current directory

Current & expected behavior:

$ node --experimental-require-module use-local-module.js 
Hello world!

$ node --require @babel/register --experimental-require-module use-local-module.js 
Hello world!

Loading ESM modules from node_modules

Current behavior without @babel/register & Expected behavior with @babel/register:

$ node --experimental-require-module use-npm-package.js 
[AsyncFunction: pMap]

Current behavior with @babel/register:

$ node --require @babel/register --experimental-require-module use-npm-package.js 
(node:179449) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
(Use `node --trace-warnings ...` to show where the warning was created)
/home/dev/temp/babel-bugs/node_modules/p-map/index.js:1
export default async function pMap(
^^^^^^

SyntaxError: Unexpected token 'export'
    at wrapSafe (node:internal/modules/cjs/loader:1389:18)
    at Module._compile (node:internal/modules/cjs/loader:1425:20)
    at Module._compile (/home/dev/temp/babel-bugs/node_modules/pirates/lib/index.js:117:24)
    at Module._extensions..js (node:internal/modules/cjs/loader:1523:16)
    at Object.newLoader [as .js] (/home/dev/temp/babel-bugs/node_modules/pirates/lib/index.js:121:7)
    at Module.load (node:internal/modules/cjs/loader:1287:32)
    at Function.Module._load (node:internal/modules/cjs/loader:1103:12)
    at Module.require (node:internal/modules/cjs/loader:1310:19)
    at require (node:internal/modules/helpers:179:18)
    at Object.<anonymous> (/home/dev/temp/babel-bugs/use-npm-package.js:1:13)
    at Module._compile (node:internal/modules/cjs/loader:1480:14)
    at Module._compile (/home/dev/temp/babel-bugs/node_modules/pirates/lib/index.js:117:24)
    at Module._extensions..js (node:internal/modules/cjs/loader:1564:10)
    at Object.newLoader [as .js] (/home/dev/temp/babel-bugs/node_modules/pirates/lib/index.js:121:7)
    at Module.load (node:internal/modules/cjs/loader:1287:32)
    at Function.Module._load (node:internal/modules/cjs/loader:1103:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:168:12)
    at node:internal/main/run_main_module:30:49

Node.js v22.1.0

Environment

System:
OS: Linux 6.5 Ubuntu 22.04.4 LTS 22.04.4 LTS (Jammy Jellyfish)
Binaries:
Node: 22.1.0
npm: 10.7.0
npmPackages:
@babel/register: 7.23.7
p-map: 7.0.2

Possible solution

No response

Additional context

Support for require()ing ESM modules added in node.js v22: nodejs/node#51977

Hey @avaly! We really appreciate you taking the time to report an issue. The collaborators on this project attempt to help as many people as possible, but we're a limited number of volunteers, so it's possible this won't be addressed swiftly.

If you need any help, or just have general Babel or JavaScript questions, we have a vibrant Slack community that typically always has someone willing to help. You can sign-up here for an invite.