NodeJS“必须使用导入来加载ES模块”

Eli*_*zen 26 javascript import export node.js

我正在尝试myArrhello.js导入index.js。但是我得到一个错误

Error [ERR_REQUIRE_ESM]: Must use import to load ES Module
Run Code Online (Sandbox Code Playgroud)

你好.js

export let myArr = ['hello', 'hi', 'hey'];
Run Code Online (Sandbox Code Playgroud)

索引.js

import { myArr } from './hello.js';
console.log(myArr);
Run Code Online (Sandbox Code Playgroud)

我哪里错了?

mal*_*mal 84

使用版本2:

npm install node-fetch@2
Run Code Online (Sandbox Code Playgroud)

v3 中的node-fetch是仅限 ESM 的模块 - 您无法使用require()导入它。

如果您无法切换到 ESM,请使用与CommonJS保持兼容的 v2 。v2 的关键错误修复将继续发布。

  • 我很困惑,问题和“node-fetch”之间有什么关系? (70认同)
  • 这……没有回答问题。 (9认同)
  • @MaximeChéramy 对我来说,在使用“ts-node”进行调试时尝试在打字稿中使用“node-fetch@3”时,会出现问题中的错误。网络搜索将我带到了这里,我猜很多其他人也看到了这个 (7认同)
  • 不是这个问题的答案,但我猜大多数最终来到这里的人都是因为那个包而遇到这个问题的。这实际上暂时解决了问题。即使我使用的是节点 14.9,也不知道如何处理导入 (4认同)
  • 这似乎与问题无关,但它确实为我解决了错误! (2认同)

小智 19

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

  1. 节点版本 >= 14。它只适用于最新版本的节点。
  2. 确保你的 package.json 包含一行“type”:“module”,如果没有这一行,节点假设你想使用 Common JS 模块而不是 ESM。

  • 另请记住删除“node_modules”并重新执行“npm install” (8认同)

Pra*_*Vig 7

希望这可以帮助:

我在构建 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
Run Code Online (Sandbox Code Playgroud)

然后我意识到我使用的节点版本与用于在此项目中安装软件包的节点版本不同

我有两个选择:

  1. 将节点版本更改为该项目所需的版本并重新构建。
  2. 保留您拥有的节点版本并删除node_modules目录和package-lock.json文件,然后再次执行npm install

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

我不想发布关于相同的另一个问题,所以我在这里发布了一个答案。


Dan*_*hka 6

如果您的 Node.js 版本低于 14,例如 v12 - 您必须指定此标志:

node --experimental-modules your.mjs
Run Code Online (Sandbox Code Playgroud)

  • 以该顺序。甚至不要考虑执行此“node your.mjs --experimental-modules” (2认同)

小智 5

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

要删除package-lock.json文件和node_modules文件夹,请运行 npm。然后我npm start来解决我的问题。


归档时间:

查看次数:

57940 次

最近记录:

4 年,11 月 前