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

使用pkg打包Typescript+NodeJS应用报ENOENT node:util错误如何解决

问题解决指南

报错根因

Cannot read file, ENOENT node:util 错误来自两方面:

  1. 你使用的pkg 5.4.1版本对Node.js核心模块的node:前缀导入识别存在兼容缺陷,对ESM(ECMAScript模块)的支持不完善
  2. 你的项目在package.json中声明了"type": "module",同时tsconfig配置输出的是ES2020模块格式,pkg默认对ESM项目的解析逻辑没有对齐Node原生规则

解决方案

方案1:切换输出为CommonJS格式(兼容性最好,优先选)

修改tsconfig.json的compilerOptions配置:

{
  "compilerOptions": {
    // 把原来的 "module": "ES2020" 替换为下面的配置
    "module": "CommonJS",
    // 可选:保留target为ES2021不影响
  }
}

修改完成后重新执行编译命令:

npm run compile

再执行原打包命令即可正常运行:

pkg --out-path binaries .

方案2:保留ESM格式,补充pkg配置

如果必须使用ESM模块,在package.json中新增pkg专属配置段:

{
  // 其他原有配置不变,新增下面的段
  "pkg": {
    "scripts": "distribution/**/*.js",
    "options": ["experimental-modules"],
    "targets": ["node16-linux-x64", "node16-macos-x64", "node16-win-x64"]
  }
}

打包时添加参数规避模块解析问题:

pkg --out-path binaries --public-packages "*" .

方案3:升级pkg版本

最新版pkg已经修复了node:前缀核心模块的识别问题,直接升级pkg到最新版本后重新打包即可。

遗漏配置说明

你确实缺少必要的配置:

  • 没有提前对齐TS编译输出的模块格式和pkg的兼容范围
  • ESM项目没有给pkg补充对应的实验性模块支持配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:15:03