chalk - 错误 [ERR_REQUIRE_ESM]:ES 模块的 require()

chalk - Error [ERR_REQUIRE_ESM]: require() of ES Module

您好,我尝试在我非常简单的应用程序上安装粉笔,然后出现错误:

Error [ERR_REQUIRE_ESM]: require() of ES Module my-file-is-here  and chalk\node_modules\chalk\source\index.js from my-file-is-here not supported.
Instead change the require of index.js in my-file-is-here to a dynamic import() which is available in all CommonJS modules.
    at Object.<anonymous> (`my-file-is-here`) {
  code: 'ERR_REQUIRE_ESM'
}

这就是我的代码:

const os = require("os")
const chalk = require("chalk")

console.log("app running")

认为它是 ES 模块并以 import 方式工作,但您可以这样做:

const { chalk } = require("chalk");

当我以 v8 风格使用 firebase 时,它​​对我有用。

//你的第一次改变Package.json

"main": "app.js",
"type": "module",//use this line 

//第二次变化App.js

import os from 'os' //  const os = require("os")

import chalk from 'chalk';//const chalk = require("chalk")

粉笔 5 已更改为 ESM。他们提供了一个 link 来更好地理解这意味着什么:Pure ESM.

来自粉笔自述文件:

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.

截至此回复,粉笔 4 的最新版本是 4.1.2

这与您使用的版本有关,我认为是 5.0.0。改为使用 chalk@4.1.2

  1. npm uninstall chalk

然后

  1. npm i chalk@4.1.2

现在您可以运行您的代码

const chalk = require('chalk');
console.log(chalk.blue('Hello world!')); 
  • "type": "module" 添加到您的 package.json。
  • 在你的 package.json 中用 "exports": "./index.js" 替换 "main": "index.js"
  • 将 package.json 中的“引擎”字段更新为 Node.js 12:“节点”:“^12.20.0 || ^14.13.1 || >=16.0.0”。
  • 从所有 JavaScript 个文件中删除 'use strict';
  • 将所有 require()/module.export 替换为 import/export

imports: import x from '.'仅使用完整的相对文件路径; → import x from './index.js';.

如果您有 TypeScript 类型定义(例如 index.d.ts),请将其更新为使用 ESM imports/exports。

可选但推荐使用 node: protocol 导入。

第一步 npm uninstall chalk(删除所有chalk文件)


第 2 步 npm 安装 chalk@4.1.0

const chalk = require("chalk");
console.log(chalkl.green("Hello"));

完成

您可以在 CJS

中使用 dynamic import 和 chalk^5 ESM
async function chalk() {
  return (await import("chalk")).default;
}

async function main(){
  console.log((await chalk()).gray(">", ...commands));
}