使用pkg工具打包含canvas的Node.js应用时出现ERR_DLOPEN_FAILED错误
解决pkg打包含canvas的Node.js应用时出现ERR_DLOPEN_FAILED错误
问题背景
使用pkg工具打包包含canvas包的Node.js应用生成可执行文件时,触发以下错误:
Error: error: 126C: code: 'ERR_DLOPEN_FAILED' at process.dlopen (pkg/prelude/bootstrap.js:2251:28)
不含canvas包时生成的exe可正常运行,仅在引入canvas后出现该问题。
复现步骤
- 按常规流程创建Node.js应用
- 安装canvas包并在入口文件(index.js)中引入
- 执行
node index.js可正常运行;执行pkg index.js生成exe后,运行.\index-win.exe触发上述错误
环境信息
- Node.js版本:v16.17.0、18.5.0、18.17.0
- 操作系统:Windows 10
- pkg版本:v5.8.1
解决方案
1. 配置pkg打包时包含canvas的二进制文件
canvas依赖原生二进制库,pkg默认不会自动打包这些文件,需要在package.json中添加pkg配置,指定要包含的资源:
"pkg": { "assets": [ "./node_modules/canvas/build/Release/*" ] }
2. 补充Windows系统依赖文件
canvas在Windows下依赖libpng16-16.dll、zlib1.dll等动态链接库,这些文件通常位于./node_modules/canvas/build/Release/目录下。可以将这些dll文件复制到项目根目录,同时在pkg配置中添加:
"pkg": { "assets": [ "./node_modules/canvas/build/Release/*", "./*.dll" ] }
3. 匹配兼容的版本组合
部分版本的canvas和pkg存在兼容性问题,建议尝试canvas@2.11.2 + pkg@5.8.1的组合,或升级至两者的最新稳定版。
4. 明确指定打包平台
打包时指定Windows平台,避免跨平台打包导致的异常:
pkg -t node18-win-x64 index.js
验证步骤
修改配置后重新执行pkg index.js,运行生成的可执行文件,检查是否正常启动。
内容的提问来源于stack exchange,提问作者bigboss
相关产品推荐
相关产品推荐

