使用pkg打包node/express项目为exe时因robotjs报错无法运行
解决方案
你遇到的错误本质是robotjs为包含C++编译产物的原生Node模块,pkg打包时无法自动正确处理这类模块的二进制文件,且运行时找不到对应版本的.node产物,可按以下步骤修复:
- 首先安装缺失的prebuild-install依赖,全局和项目本地各装一次:
npm install -g prebuild-install npm install prebuild-install --save-dev
- 修改
package.json中的pkg配置,明确指定需要打包的robotjs二进制文件,同时补全target的平台架构信息:
"pkg": { "assets": [ "templates/**/*", "public/**/*", "node_modules/robotjs/build/Release/robotjs.node" ], "targets": [ "node14-win-x64" ], "outputPath": "dist" }
- 重新编译适配node14版本的robotjs二进制产物,将命令中的
14.x.x替换为你本地实际安装的node14完整版本号:
npm rebuild robotjs --target=14.x.x --runtime=node --arch=x64
- 执行
pkg .完成打包后,手动将node_modules/robotjs/build/Release/robotjs.node复制到dist目录下,和生成的exe文件放在同一级路径。 - 如果仍无法运行,修改代码中引入robotjs的逻辑,改为直接加载同目录下的二进制文件:
const path = require('path'); const robot = require(path.join(process.execPath, '../robotjs.node'));
内容的提问来源于stack exchange,提问作者earlycoder
相关产品推荐
相关产品推荐

