NodeJS 如何修复“ERR_REQUIRE_ESM”错误?

yhived7q  于 2022-12-22  发布在  Node.js
关注(0)|答案(4)|浏览(2519)

我正在尝试使用粉笔npm.我的代码是:

const chalk = require('chalk');

          console.log(
          chalk.green('All sytems go') +
          chalk.orange('until').underline +
          chalk.black(chalk.bgRed('an error occurred'))
           );

当我输入node main.js时,我在终端中收到此错误
错误[错误_请求_ESM]:不支持/用户/ezell/文档/CodeX/NPM/main. js中ES模块/用户/ezell/文档/CodeX/NPM/节点_模块/chalk/源/index. js的require()。请改为将/用户/ezell/文档/CodeX/NPM/main. js中index.js的require更改为动态导入(),该动态导入在所有CommonJS模块中均可用。在对象处。(/用户/ezell/文档/CodeX/NPM/main.js:1:15){代码:'错误_要求_ESM' }

0tdrvxhp

0tdrvxhp1#

您需要切换到使用import关键字,因为Chalk 5仅支持ESM模块。
因此,要修复代码以适应这些更改,您需要......
1.编辑package.json文件以允许ESM导入。在package.json文件中添加以下内容:

{
  "type": "module"
}

1.使用import关键字加载Chalk,如下所示:

import chalk from "chalk";

但是,如果您想使用require(),则需要降级到Chalk 4。按照以下步骤进行降级。
1.在package.json文件中将现有chalk密钥替换为以下内容:

{
  "dependencies": {
    "chalk": "4.1.2"
  }
}

1.然后,运行以下命令从package.json文件安装Chalk。确保在package.json文件所在的目录下运行此命令!

$ npm install

1.像平常一样使用require()语句。

const chalk = require("chalk");

总之,这是你可以做的两件事。

  • 继续使用粉笔5,并更新import语句。
  • 降级到粉笔4,保留require()语句。
roejwanj

roejwanj2#

解决方案,发生这种情况是因为您必须首先使用当前的稳定版本2.x:

npm uninstall -D node-fetch

之后:

npm install node-fetch@2

这应该行得通。

relj7zay

relj7zay3#

nanoid出现相同的“ERR_REQUIRE_ESM”错误:^4.0.0 &有多种方法可以解决此错误:-
1)使用fix esm https://www.npmjs.com/package/fix-esm模块并按如下方式导入模块:

const someModule = require("fix-esm").require("some-module");

2)使用动态导入,如下所示:

import('nanoid') 
.then((res)=>{ console.log(res) })         
.catch((err)=>{ console.log(err) });

请确保在上述两种情况下package.json中没有type:“module”字段,否则会出现“TypeError [ERR_UNKNOWN_FILE_EXTENSION]:未知文件扩展名”错误
3)将模块版本降级为稳定的旧版本,例如在我的情况下,当我将nanoid版本降级为:

"nanoid": "^3.1.22"
r1wp621o

r1wp621o4#

最新版本的Chalk仅与ESM模块兼容,因此希望您加载import,而不是require()
来自文档:
重要提示:Chalk 5是ESM。如果您希望将Chalk与TypeScript或构建工具一起使用,您可能会暂时使用Chalk 4。Read more
所以,你的选择是:
1.将您的项目切换到ESM模块,并使用import而不是require()加载最新版本的Chalk。
1.安装可与require()配合使用的Chalk版本4。
1.在Node.JS的最新版本中,可以使用动态导入将ESM模块加载到CommonJS模块中:const chalk = await import('chalk');

相关问题