在 Node.js 中导入: 错误“ Must use import to load ES Module”

我试图从 你好 JS导入 myArrIndex.js

Error [ERR_REQUIRE_ESM]: Must use import to load ES Module

文件 你好 JS

export let myArr = ['hello', 'hi', 'hey'];

文件 index.js

import { myArr } from './hello.js';
console.log(myArr);

我哪里做错了?

238933 次浏览

The problem is that Node.js does not currently support import and export natively yet. It is still experimental according to 文件. I recommend you use 巴别塔 to compile your code and allow you to use import and export.

例如,您可以安装 @ babel/node包并使用以下方法运行项目:

npx babel-node index.js

下面是 @ babel/node的文档。与文档状态一样,此命令仅用于本地开发。在生产中,他们推荐 像这样的配置

我运行你的代码没有任何问题。检查两件事:

  1. Js version > = 14. 它只适用于最新版本的 Node.js。
  2. 确保你的 package.json包括一行 "type": "module"。如果没有这一行,Node.js 假设您希望使用 CommonJS模块而不是 ESM。

如果 Node.js 版本低于14,比如 v12-你必须指定这个标志:

node --experimental-modules your.mjs

我在构建 做出反应项目时遇到了类似的问题。

错误是这样的:

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 版本不同 上。

I had two options:

  1. Change Node.js version to the one required by this project and build again.
  2. 继续使用 Node.js 版本,删除 Node _ module目录和 包裹锁定 Json文件,然后再次执行 Npm 安装

我选择了第一种方法,它对我很有效。

你好 JS重命名为 你好 MJ

您现在正在使用 CommonJS. js扩展。要导入 ES6模块,必须更改要导入到 。 mjs的文件的扩展名,以便它知道这是一个 ES6模块。

使用版本2:

npm install node-fetch@2

Node-get from v3是一个只支持 ESM 的模块-您无法使用 要求()导入它。

If you cannot switch to ESM, please use v2 which remains compatible with CommonJS. Critical bug fixes will continue to be published for v2.

我使用 nvm 安装 Node.js 的最新稳定版。

要删除 包裹锁定 Json文件和 node_modules folder,运行 npm。然后运行 npm start来解决我的问题。