【问题标题】:How would you fix an 'ERR_REQUIRE_ESM' error?您将如何修复 \'ERR_REQUIRE_ESM\' 错误?
【发布时间】:2022-08-14 12:41:29
【问题描述】:

我正在尝试使用粉笔 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\' }

    标签: node.js npm chalk


    【解决方案1】:

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


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

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

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

      import chalk from "chalk";
      

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

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

        {
          "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() 语句。

    【讨论】:

    • 太感谢了!从“粉笔”添加导入粉笔;和“类型”:“模块”工作!
    【解决方案2】:

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

    从文档:

    重要提示:粉笔 5 是 ESM。如果您想将 Chalk 与 TypeScript 或 一个构建工具,你现在可能想要使用 Chalk 4。 Read more

    所以,你的选择是:

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

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

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

    【讨论】:

      【解决方案3】:

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

      npm uninstall -D node-fetch
      

      在那之后:

      npm install node-fetch@2
      

      这应该有效。

      【讨论】:

        【解决方案4】:

        nanoid:^4.0.0 出现相同的“ERR_REQUIRE_ESM”错误,并且有多种方法可以解决此错误:-

        1)使用 fix ems 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]: Unknown file extension”错误

        3)将模块版本降级为稳定的旧版本,例如,当我将 nanoid 版本降级为:

        "nanoid": "^3.1.22"
        

        【讨论】:

          猜你喜欢
          • 2019-04-01
          • 2019-10-27
          • 2018-05-24
          • 2021-11-08
          • 2016-08-25
          • 2021-03-25
          • 2021-12-05
          • 2021-11-03
          • 1970-01-01
          相关资源
          最近更新 更多