我正试图将myArr
从hello.js导入index.js。但是我得到了的错误
Error [ERR_REQUIRE_ESM]: Must use import to load ES Module
文件hello.js
export let myArr = ['hello', 'hi', 'hey'];
文件index.js
import { myArr } from './hello.js';
console.log(myArr);
我哪里错了?
使用版本2:
npm install node-fetch@2
v3中的节点获取是一个仅限ESM的模块-您无法使用require((导入它。
如果您无法切换到ESM,请使用与CommonJS保持兼容的v2。v2的关键错误修复将继续发布。
我运行了您的代码,没有遇到任何问题。检查两件事:
- Node.js版本>=14.它只适用于最新版本的Node.js
- 确保您的
package.json
包含一行"type": "module"
。如果没有这一行,Node.js假设您希望使用CommonJS模块而不是ESM
我在构建React项目时遇到了类似的问题。
错误如下:
ERROR in ./src/index.js
Module build failed (from ./node_modules/babel-loader/lib/index.js):
Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /home/pradeep/Work/my_project/node_modules/@babel/runtime/helpers/interopRequireWildcard/_index.mjs
然后我意识到我使用的Node.js版本与本项目中用于安装软件包的版本不同。
我有两个选择:
- 将Node.js版本更改为该项目所需的版本,然后重新构建
- 继续使用Node.js版本,删除Node_modules目录和package-lock.json文件,然后再次执行npm安装
我选择了第一种方法,它对我有效。
如果你的Node.js版本低于14,例如v12-你必须指定这个标志:
node --experimental-modules your.mjs
我使用nvm安装Node.js.的最新稳定版本
要删除软件包lock.json文件和node_modules文件夹,请运行npm。然后我npm start
来解决我的问题。
将hello.js重命名为hello.mjs.
您现在正在使用带有.js扩展名的CommonJS。要导入ES6模块,您必须将要导入的文件的扩展名更改为.mjs,以便它知道它是ES6模块。
问题是Node.js目前还不支持本机导入和导出。根据文件,它仍然是实验性的。我建议您使用Babel编译代码,并允许您使用导入和导出。
例如,您可以安装@babel/note包,并使用运行您的项目
npx babel-node index.js
以下是@babel/node的文档。与文档状态一样,此命令仅用于本地开发。在生产中,他们推荐这样的配置。