mirror of
https://github.com/nodejs/node.git
synced 2026-11-09 15:11:11 -05:00
module: fix error message about importing names from cjs
When importing specific names from a CJS module, and renaming them using
`as`, the example fix in the error message erroneously contains the
keyword `as` in the destructuring variable declaration.
Example of this issue:
import { parse as acornParse } from "acorn";
^^^^^
SyntaxError: The requested module 'acorn' is expected to be of type CommonJS, which does not support named exports. CommonJS modules can be imported by importing the default export.
For example:
import pkg from 'acorn';
const { parse as acornParse } = pkg;
PR-URL: https://github.com/nodejs/node/pull/33882
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Guy Bedford <guybedford@gmail.com>
Reviewed-By: Myles Borins <myles.borins@gmail.com>
This commit is contained in:
1 parent
178e52a7ea
commit
e199fc5534
3 files changed
+18
-1
No files matched your search
@@ -8,6 +8,7 @@ const {
|
||||
SafePromise,
|
||||
StringPrototypeIncludes,
|
||||
StringPrototypeMatch,
|
||||
StringPrototypeReplace,
|
||||
StringPrototypeSplit,
|
||||
} = primordials;
|
||||
|
||||
@@ -109,13 +110,14 @@ class ModuleJob {
|
||||
if (format === 'commonjs') {
|
||||
const importStatement = splitStack[1];
|
||||
const namedImports = StringPrototypeMatch(importStatement, /{.*}/)[0];
|
||||
const destructuringAssignment = StringPrototypeReplace(namedImports, /\s+as\s+/g, ': ');
|
||||
e.message = `The requested module '${childSpecifier}' is expected ` +
|
||||
'to be of type CommonJS, which does not support named exports. ' +
|
||||
'CommonJS modules can be imported by importing the default ' +
|
||||
'export.\n' +
|
||||
'For example:\n' +
|
||||
`import pkg from '${childSpecifier}';\n` +
|
||||
`const ${namedImports} = pkg;`;
|
||||
`const ${destructuringAssignment} = pkg;`;
|
||||
const newStack = StringPrototypeSplit(e.stack, '\n');
|
||||
newStack[3] = `SyntaxError: ${e.message}`;
|
||||
e.stack = ArrayPrototypeJoin(newStack, '\n');
|
||||
|
||||
@@ -10,6 +10,13 @@ const expectedRelative = 'The requested module \'./fail.cjs\' is expected to ' +
|
||||
'import pkg from \'./fail.cjs\';\n' +
|
||||
'const { comeOn } = pkg;';
|
||||
|
||||
const expectedRenamed = 'The requested module \'./fail.cjs\' is expected to ' +
|
||||
'be of type CommonJS, which does not support named exports. CommonJS ' +
|
||||
'modules can be imported by importing the default export.\n' +
|
||||
'For example:\n' +
|
||||
'import pkg from \'./fail.cjs\';\n' +
|
||||
'const { comeOn: comeOnRenamed } = pkg;';
|
||||
|
||||
const expectedPackageHack = 'The requested module \'./json-hack/fail.js\' is ' +
|
||||
'expected to be of type CommonJS, which does not support named exports. ' +
|
||||
'CommonJS modules can be imported by importing the default export.\n' +
|
||||
@@ -38,6 +45,13 @@ rejects(async () => {
|
||||
message: expectedRelative
|
||||
}, 'should support relative specifiers with double quotes');
|
||||
|
||||
rejects(async () => {
|
||||
await import(`${fixtureBase}/renamed-import.mjs`);
|
||||
}, {
|
||||
name: 'SyntaxError',
|
||||
message: expectedRenamed
|
||||
}, 'should correctly format named imports with renames');
|
||||
|
||||
rejects(async () => {
|
||||
await import(`${fixtureBase}/json-hack.mjs`);
|
||||
}, {
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
import { comeOn as comeOnRenamed } from "./fail.cjs"
|
||||
Reference in new issue
Block a user