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

Javascript NodeJS“;“必须使用导入来加载ES模块”;,javascript,node.js,import,export,Javascript,Node.js,Import,Export,我正在尝试将myArr从hello.js导入index.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); 我哪里出错了?你应该使用 module.exports.myA

我正在尝试将
myArr
hello.js导入index.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);
我哪里出错了?

你应该使用

module.exports.myArr = ['hello', 'hi', 'hey'];
作为你的出口声明

编辑: 和使用


作为导入

问题在于节点当前还不支持本机导入和导出。根据研究结果,它仍然是实验性的。我建议您使用babel来编译代码,并允许您使用导入和导出

例如,您可以安装@babel/node软件包并使用以下工具运行项目:

npx babel-node index.js

这是你的文件。与docs状态一样,此命令仅用于本地开发。在生产中,他们建议使用类似的配置。快乐编码

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

  • 节点版本>=14。它仅适用于最新版本的节点
  • 确保您的package.json包含一行“type”:“module”,如果没有这一行,节点将假定您希望使用公共JS模块而不是ESM

  • 如果节点版本低于14,例如v12,则必须指定标志:

    node --experimental-modules your.mjs
    
    希望这有助于:

    我在构建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\u模块目录和package lock.json文件,然后再次执行npm安装
  • 我选择了第一种方法,它对我很有效


    我不想再发一个关于这个问题的问题,所以我在这里贴了一个答案。

    这个问题的重点是使用
    导入
    导出
    ,而不是
    模块。导出
    要求()
    我认为他真的不想使用导入和导出,如果是这样的话,无论如何,应该更清楚一点,不需要使用import和exports而不是module.exports和requireWhat版本的node.js?如果您的文件没有文件扩展名
    .mjs
    ,则您需要执行以下操作才能在node.js中使用
    导入
    导出
    。当我尝试它时,我发现它相当痛苦。我相信总有一天它会是内置的并且易于使用,但是node.js还没有出现,因为node.js不需要这个标志14@AluanHaddad-为了清楚起见,节点14非常新。它上个月刚刚“流行”,直到今年10月才会“活跃”。因此,v14正在到达的过程中。如果人们愿意,他们可以去获取它,但当前和活动之间的时间点是确保它是稳定的,并给图书馆作者时间去适应它(如果必要的话)。并且,nodejsv14文档说“默认情况下,对ECMAScript模块的实验支持是启用的。”。因此,在V14中不再需要该标志,但它仍处于“实验”阶段。我的文件名为.mjs,那么为什么它需要packages.json中的“type”:“module”,这一更改破坏了其他脚本:<我必须在脚本运行之前添加它,然后再次删除它。^^不太好..我不知道发生了什么,但我去了节点14,不得不更改为“类型”:“模块”成功运行,删除了“类型”:“模块”,现在我可以在没有它的情况下运行它:按此顺序。甚至不要考虑在你的.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