skip to content
枫铃 BLOG

解决 Node.js 模块导入错误

/ 2 min read

错误信息:

FATAL Error [ERR_REQUIRE_ESM]: require() of ES Module D:\hexoblog\blog-demo\node_modules\strip-ansi\index.js from D:\hexoblog\blog-demo\node_modules\hex o\node_modules\hexo\dist\plugins\console\list\common.js not supported.

这个错误是由于 Node.js 中 CommonJS 模块(使用 require())试图导入 ES 模块(ESM,使用 import/export)导致的不兼容问题,具体是 hexo 依赖的某个模块尝试用 require() 加载 strip-ansi(一个 ESM 模块)。

解决方法如下:

1. 降低 strip-ansi 版本(推荐)

strip-ansi 从 v7.0.0 开始改为 ESM 模块,而 Hexo 可能依赖其 CommonJS 版本。可以安装兼容的旧版本:

Terminal window
npm install strip-ansi@6.0.1 --save

(如果使用 yarn/pnpm,对应命令为 yarn add strip-ansi@6.0.1pnpm add strip-ansi@6.0.1

2. 检查 Hexo 版本并升级

确保 Hexo 是最新版本,可能已修复该兼容性问题:

Terminal window
npm update hexo --save

3. 强制 ESM 模式(备选)

如果上述方法无效,可以尝试让项目以 ESM 模式运行:

  • 在项目根目录的 package.json 中添加:
    "type": "module"
  • 注意:这可能会导致其他 CommonJS 模块出现新的兼容问题,需谨慎使用。

操作后重新运行 Hexo 命令(如 hexo server),通常能解决该错误。