您将如何修复 'ERR_REQUIRE_ESM' 错误?

How would you fix an 'ERR_REQUIRE_ESM' error?

我正在尝试使用 chalk 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

时,我在终端中收到此错误

错误 [ERR_REQUIRE_ESM]:不支持来自 /Users/ezell/Documents/CodeX/NPM/main.js 的 ES 模块 /Users/ezell/Documents/CodeX/NPM/node_modules/chalk/source/index.js 的 require()。 而是将 /Users/ezell/Documents/CodeX/NPM/main.js 中 index.js 的要求更改为在所有 CommonJS 模块中可用的动态 import() 。 在对象。 (/Users/ezell/Documents/CodeX/NPM/main.js:1:15) { 代码:'ERR_REQUIRE_ESM' }

最新版本的 Chalk 仅与 ESM 模块兼容,因此希望您使用 import 加载它,而不是 require()

来自文档:

IMPORTANT: Chalk 5 is ESM. If you want to use Chalk with TypeScript or a build tool, you will probably want to use Chalk 4 for now. Read more.

那么,您的选择是:

  1. 将您的项目切换到 ESM 模块并使用 import 而不是 require() 加载最新版本的 Chalk。

  2. 安装可与 require() 一起使用的第 4 版 Chalk。

  3. 使用较新版本的 nodejs,您可以使用动态导入将 ESM 模块加载到您的 CommonJS 模块中:const chalk = await import('chalk);

您需要切换到使用 import 关键字,因为 Chalk 5 仅支持 ESM 模块。


因此,要修复您的代码以适应这些更改,您需要...

  1. 编辑您的 package.json 文件以允许 ESM 导入。在您的 package.json 文件中添加以下内容:

    {
      "type": "module"
    }
    
  2. 使用 import 关键字加载 Chalk,如下所示:

    import chalk from "chalk";
    

但是,如果您想使用 require(),则需要降级到 Chalk 4。按照以下步骤进行降级。

  1. package.json 文件中的以下内容替换现有的 chalk 密钥:

    {
      "dependencies": {
        "chalk": "4.1.2"
      }
    }
    
  2. 然后,运行 以下命令从您的 package.json 文件安装 Chalk。确保在 package.json 文件所在的目录中 运行!

    $ npm install
    
  3. 像平常一样使用 require() 语句。

    const chalk = require("chalk");
    

总而言之,这是您可以做的两件事。

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