diff --git a/lib/internal/modules/esm/module_job.js b/lib/internal/modules/esm/module_job.js index ebae1940502b4b..ea10166fdd3536 100644 --- a/lib/internal/modules/esm/module_job.js +++ b/lib/internal/modules/esm/module_job.js @@ -151,7 +151,17 @@ class ModuleJob { await this.instantiate(); const timeout = -1; const breakOnSigint = false; - await this.module.evaluate(timeout, breakOnSigint); + try { + await this.module.evaluate(timeout, breakOnSigint); + } catch (e) { + if (e.name === 'ReferenceError' && + e.message === 'require is not defined') { + e.message += ' in ES module scope. You can use `await import` instead' + + ', or use `.cjs` extension to load the file as CommonJS ' + + 'module.'; + } + throw e; + } return { module: this.module }; } } diff --git a/test/es-module/test-esm-undefined-require.js b/test/es-module/test-esm-undefined-require.js new file mode 100644 index 00000000000000..bf5c1d07d71d75 --- /dev/null +++ b/test/es-module/test-esm-undefined-require.js @@ -0,0 +1,9 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); + +assert.rejects( + import('data:text/javascript,require;'), + // eslint-disable-next-line node-core/no-unescaped-regexp-dot + /use .await import. instead/ +).then(common.mustCall());