Wrong error annotation when commonjs `require`s an ES module
Personne n'a encore pris cette issue.
- Langage dominant
- JavaScript
- Étoiles
- 122k
- Forks
- 37.4k
- Merge moyen
- 4 j 3 h
- PR mergées (30 j)
- 272
Description
Version
^22.4.0mainwith the--no-experimental-require-moduleflag.
Platform
macOS arm64
Subsystem
esm,module
What steps will reproduce the bug?
mkdir undefined && cd undefined
echo '{"type":"module"}' > package.json
echo "import nothing from 'somewhere'" > app.js
echo "require('./app.js')" > test.cjs
node test.cjs
How often does it reproduce? Is there a required condition?
It starts to happen with v22.4.0. v20.x and <=22.3.0 are not affected.
What is the expected behavior? Why is that the expected behavior?
$ node test.cjs
/Users/mzasso/git/test/undefined/test.cjs:1
require('./app.js')
^
Error [ERR_REQUIRE_ESM]: require() of ES Module /Users/mzasso/git/test/undefined/app.js from /Users/mzasso/git/test/undefined/test.cjs not supported.
Instead change the require of app.js in /Users/mzasso/git/test/undefined/test.cjs to a dynamic import() which is available in all CommonJS modules.
at Object.<anonymous> (/Users/mzasso/git/test/undefined/test.cjs:1:1) {
code: 'ERR_REQUIRE_ESM'
}
Node.js v22.3.0
What do you see instead?
$ node test.cjs
/Users/mzasso/git/test/undefined/test.cjs:315
undefined
^
Error [ERR_REQUIRE_ESM]: require() of ES Module /Users/mzasso/git/test/undefined/app.js from /Users/mzasso/git/test/undefined/test.cjs not supported.
Instead change the require of app.js in /Users/mzasso/git/test/undefined/test.cjs to a dynamic import() which is available in all CommonJS modules.
at TracingChannel.traceSync (node:diagnostics_channel:315:14)
at Object.<anonymous> (/Users/mzasso/git/test/undefined/test.cjs:1:1) {
code: 'ERR_REQUIRE_ESM'
}
Node.js v22.4.0
Additional information
As you can see, this seems to be caused by the presence of TracingChannel.traceSync in the stack trace.
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par exécuter les commandes de reproduction de l’issue avec Node.js v22.4.0 et le flag --no-experimental-require-module, puis retracez l’erreur require ESM/CommonJS et l’annotation de la stack de TracingChannel.traceSync. Le travail est terminé lorsque l’annotation de l’erreur pointe vers la ligne require('./app.js') comme dans la sortie attendue, avec un test de régression couvrant le changement de version signalé.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- javascript
- Domaine
- backend
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 38/100