引入chalk修改控制台颜色出现ESM require报错如何解决
Chalk 自 5.0.0 版本起不再提供 CommonJS 兼容支持,是纯 ESM 包。如果你的项目是 Node.js 默认的 CommonJS 模块规范(根目录 package.json 未配置 "type": "module"),直接用 const chalk = require('chalk') 引入高版本 Chalk 就会抛出 ESM require 相关的报错,这是模块规范不匹配导致的,不是安装失败或者代码写错。
根据你的项目实际情况选一个即可:
方案1:全项目切换为ESM规范
适合新项目或者没有太多CommonJS历史代码的项目,打开根目录package.json添加配置:{ "type": "module" }把Chalk的引入语句改成ESM写法即可正常使用:
import chalk from 'chalk' console.log(chalk.red('这是红色的控制台输出'))注意:配置
"type": "module"后,项目内所有.js文件默认按ESM规则解析,原有的require()、module.exports写法都要替换成import/export,老项目改动成本高不建议选。方案2:降级Chalk到兼容CommonJS的版本
成本最低的方案,不需要改任何现有项目配置和代码,直接卸载当前高版本Chalk,安装最后一个支持CommonJS的稳定版:npm uninstall chalk npm install chalk@4.1.2安装完成后原有
const chalk = require('chalk')的写法可以直接运行,所有颜色API和高版本基本一致,绝大多数场景下完全够用。方案3:CommonJS项目动态加载高版本Chalk
如果不想降级Chalk,也不想改动整个项目的模块规范,可以用CommonJS支持的动态import方法异步加载Chalk:// 所有用到chalk的逻辑需要放在异步上下文里执行 async function init() { const chalk = (await import('chalk')).default console.log(chalk.blue('这是蓝色的控制台输出')) } init()缺点是涉及Chalk的逻辑都要写在异步函数里,代码书写灵活度稍差。
如果用了TypeScript,还要同步检查tsconfig.json的模块配置:
- 用高版本Chalk时,
compilerOptions.module要设置为NodeNext或者ESNext - 不想改TS配置的话直接用Chalk 4.x版本即可,不需要额外调整配置
内容的提问来源于stack exchange,提问作者Amit Sharma

