You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Puppeteer配置文件导入顺序导致Node.js模块执行报错求助

Node.js ESM环境下导入顺序引发的ERR_INTERNAL_ASSERTION错误解析

问题场景

环境配置:

  • macOS 14.5
  • Node.js v20.14.0
  • package.json type 设为 module
  • Puppeteer v22.11.0

相关文件内容验证:

$ jq -r '.type' package.json
module

$ jq -r '.devDependencies.puppeteer' package.json
22.11.0
// puppeteer.config.cjs
// 空配置文件

当按以下顺序导入模块时:

// test.js
import puppeteer from "puppeteer";
import puppeteerConfig from "./puppeteer.config.cjs";
console.log("i am a puppet");

执行node test.js触发内部断言错误:

$ node test.js
node:internal/assert:14
    throw new ERR_INTERNAL_ASSERTION(message);
          ^

Error [ERR_INTERNAL_ASSERTION]: This is caused by either a bug in Node.js or incorrect usage of Node.js internals.
Please open an issue with this stack trace at https://github.com/nodejs/node/issues

    at assert (node:internal/assert:14:11)
    at cjsLoader (node:internal/modules/esm/translators:347:7)
    at ModuleWrap.<anonymous> (node:internal/modules/esm/translators:297:7)
    at ModuleJob.run (node:internal/modules/esm/module_job:222:25)
    at async ModuleLoader.import (node:internal/modules/esm/loader:316:24)
    at async asyncRunEntryPointWithESMLoader (node:internal/modules/run_main:123:5) {
  code: 'ERR_INTERNAL_ASSERTION'
}

但调换导入顺序后错误消失:

// test.js
import puppeteerConfig from "./puppeteer.config.cjs";
import puppeteer from "puppeteer";
console.log("i am a puppet");

执行结果正常:

$ node test.js
i am a puppet

原因分析

该错误属于Node.js ESM与CJS模块交互时的内部竞态bug:

  1. Puppeteer导入时会触发一系列内部模块加载逻辑,可能修改了ESM加载器的内部状态
  2. 后续加载本地CJS模块时,ESM加载器的内部断言检查失败,触发ERR_INTERNAL_ASSERTION
  3. 先加载CJS模块时,加载器先完成CJS到ESM的转换处理,此时再加载Puppeteer不会干扰加载器的内部状态,因此不会触发错误

解决方案

  • 固定导入顺序:优先导入本地CJS模块,再导入Puppeteer
  • 统一模块格式:将puppeteer.config.cjs重命名为puppeteer.config.mjs,改用ESM格式,避免CJS与ESM的加载冲突
  • 升级Node.js版本:后续Node.js版本可能修复了该内部断言bug,升级到较新版本可尝试解决问题

内容的提问来源于stack exchange,提问作者Mr.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 15:23:19