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

使用pkg打包exe后出现zmq.Context不是构造函数等错误求助

解决pkg打包zeromq项目后运行报错的问题

问题描述

执行tsc --build tsconfig.json编译代码,再通过pkg .\dist\server.js --output MyAppExe --targets node16-win-x64 --debug --public -打包为exe文件后,运行时抛出错误:

Failed to send request to zmqLayer TypeError: zmq.Context is not a constructor
    at defaultContext (C:\snapshot\backend\node_modules\zeromq\lib\index.js:183:9)
    at new <anonymous> (C:\snapshot\backend\node_modules\zeromq\lib\index.js:299:37)
    at Function.<anonymous> (C:\snapshot\backend\node_modules\zeromq\lib\index.js:751:14)

也曾遇到TypeError: zmq.zmqVersion is not a function这类TypeScript相关错误。已在tsconfig.json中配置忽略node_modules和JS文件,且zeromq均为JS代码,问题原因不明,附tsconfig.json内容:

{
  "compilerOptions": {
    "outDir": "./dist/",
    "sourceMap": true,
    "noImplicitAny": false,
    "module": "commonjs",
    "target": "es6",
    "jsx": "react",
    "allowJs": true,
    "moduleResolution": "node",
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "suppressImplicitAnyIndexErrors": true,
    "checkJs": false
  },
  "ts-node": {
    "esm": true
  },
  "lib": ["esnext"],
  "paths": [
    "global.d.ts"
  ],
  "include": ["./src", "./server.ts"],
  "exclude": [
      "node_modules",
    "./node_modules",
    "./node_modules/*",
    "./node_modules/@types/node/index.d.ts",]
}

解决方案

  • 切换兼容的zeromq版本:zeromq较新的ESM版本和pkg快照机制兼容性差,建议降级到zeromq@5.2.0这类稳定版本,执行npm install zeromq@5.2.0。
  • 指定pkg打包时包含zeromq原生文件:pkg默认可能漏打包zeromq的.node二进制文件,修改打包命令添加资源路径:
    pkg .\dist\server.js --output MyAppExe --targets node16-win-x64 --debug --public --assets "node_modules/zeromq/lib/binding/**/*"
    
  • 修正TypeScript配置冲突:移除tsconfig中的"ts-node": { "esm": true },因为编译目标是commonjs,ESM模式会导致导入逻辑不一致;同时确保代码中zeromq的导入方式匹配模块规范:
    // CommonJS风格
    const zmq = require('zeromq');
    // 或ES导入(需确保esModuleInterop生效)
    import * as zmq from 'zeromq';
    
  • 禁用pkg快照机制:快照虚拟文件系统可能导致zeromq无法加载原生模块,尝试添加--no-snapshot参数打包:
    pkg .\dist\server.js --output MyAppExe --targets node16-win-x64 --debug --public --no-snapshot
    
  • 验证dist目录结构:排查时可临时将node_modules/zeromq复制到dist目录下再打包,确认是否为依赖缺失问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:30:52