请求的模块没有提供在 JS 中命名的导出
The requested module does not provide an export named in JS
“Uncaught SyntaxError: The requested module does not provide an export named”发生在混淆默认和命名的 ES6 模块导入和导出时。
要解决该错误,请确保在不使用大括号的情况下导入默认导出,并使用大括号导入命名导出。
下面是错误如何发生的示例。这是我们的index.js
文件:
索引.js
// 👇️ default export export default function sum(a, b) { return a + b; }
这是一个从index.js
.
另一个文件.js
// ⛔️ should not use curly braces import {sum} from './index.js'; console.log(sum(10, 15));
请注意,在我们的index.js
文件中,我们使用了
默认导出,但是当我们在其他文件中导入函数时,我们使用了named
导入。这就是发生错误的原因。
使用默认的导出和导入
您可以
通过以下方式将默认导入/导出与 ES6 模块一起使用。
索引.js
// 👇️ default export export default function sum(a, b) { return a + b; }
并使用默认导入导入函数。
另一个文件.js
// 👇️ default import import sum from './index.js'; console.log(sum(10, 15));
请注意,我们在处理导入时不使用花括号default
。
每个文件只能有 1 个默认导出,但是,您可以根据需要拥有任意数量的命名导出。
使用命名导出和导入
以下是您如何使用命名导入/导出。
索引.js
// 👇️ named export export function sum(a, b) { return a + b; }
现在我们在另一个文件中使用命名导入。
另一个文件.js
// 👇️ named import import {sum} from './index.js'; console.log(sum(10, 15));
请注意,我们使用了花括号,这就是我们导入导出的方式named
。
您必须与您的进出口保持一致。导入默认导出时不要使用花括号,导入命名导出时使用花括号。
使用默认的和命名的导出和导入
您也可以混合搭配,这里是一个例子。
索引.js
// 👇️ named export export const num = 100; // 👇️ default export export default function sum(a, b) { return a + b; }
这是进口商品。
另一个文件.js
// 👇️ default and named imports import sum, {num} from './index.js'; console.log(sum(10, 15)); // 👉️ 25 console.log(num); // 👉️ 100
我们使用默认导入来导入sum
函数,使用命名导入来导入num
变量。
确保您从中导入的文件导出值
错误的另一个常见原因是试图从不导出函数、变量或类的文件中导入函数、变量或类。
确保:
- 导入语句中文件的路径是正确的
- 你没有混淆命名和默认的导出和导入
- 您在导入语句中指定了文件的扩展名
- 您没有拼错要导入的变量或函数的名称
- 每个文件只能
default
导出 1 个,但可以
named
根据需要导出任意多个
结论
解决报错“The requested module does not provide an export named”,与你的ES6 imports和exports保持一致。
如果一个值作为默认导出导出,则它必须作为默认导入导入,如果它作为命名导出导出,则必须作为命名导入导入。
额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息: