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



我正试图将myArrhello.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的关键错误修复将继续发布。

我运行了您的代码,没有遇到任何问题。检查两件事:

  1. Node.js版本>=14.它只适用于最新版本的Node.js
  2. 确保您的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版本与本项目中用于安装软件包的版本不同。

我有两个选择:

  1. 将Node.js版本更改为该项目所需的版本,然后重新构建
  2. 继续使用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的文档。与文档状态一样,此命令仅用于本地开发。在生产中,他们推荐这样的配置。

相关内容

最新更新