产品服务端使用nodejs开发,部署时不能将代码部署到服务器,所以查到可用pkg将node服务端打包成exe,事先已经查了不少资料,本以为是一个很简单的事情,结果折腾了一天,才算搞定。
现将打包过程以及遇到的问题记录如下,希望可以帮助到后面的人。 填坑记录!!!!
打包流程记录:
1. 安装pkg
npm install -g pkg
2. 修改package.json,添加pkg配置和命令
"scripts": {
.....,
"pkg": "pkg . --out-path=dist/"
},
"bin": "./index.js",
"pkg": {
"scripts": "build/**/*.js",
"assets": "views/**/*",
"targets": [
"node14"
],
"outputPath": "dist"
},
3. 执行命令 npm run pkg
备注: 不建议用pkg -t win index.js方法,坑太多,上面的package.json相对还是简单的。
----------------------------------------------------------------------------------------------------------------------------------------
解决方法:将Node.js项目打包为一个可执行文件 https://swmlee.com/2019/12/18/technicalessays/pack-nodejs-project/ 注意 pkg 支持的 nodejs 版本问题 如果安装的 pkg 版本,和实际需要打包的 nodejs 项目的版本不同,则可能会出现类似pkg error no available node version satisfies 'node 9'的报错信息。 经查询https://github.com/vercel/pkg-fetch/blob/main/patches/patches.json { "v18.12.1": ["node.v18.12.1.cpp.patch"], "v16.18.1": ["node.v16.18.1.cpp.patch"], "v14.21.1": ["node.v14.21.1.cpp.patch"], "v12.22.11": ["node.v12.22.11.cpp.patch"], "v10.24.1": ["node.v10.24.1.cpp.patch"], "v8.17.0": ["node.v8.17.0.cpp.patch"] } 需要将node升级到以上版本,我是将node 升级到 v14.21.1, 升级方法如下: node v14.21.1下载地址 https://registry.npmmirror.com/binary.html?path=node/latest-v14.x/
2. 无法加载文件 C:\Users\*\AppData\Roaming\npm\pkg.ps1,因为在此系统上禁止运行脚本。 pkg : 无法加载文件 C:\Users\admin\AppData\Roaming\npm\pkg.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/ go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。 所在位置 行:1 字符: 1
解决方法: https://blog.csdn.net/weixin_39729729/article/details/119766261
3. 执行exe时提示需要手动安装mysql2包 PS G:\pkg> .\server.exe pkg/prelude/bootstrap.js:1876 throw error; ^
Error: Please install mysql2 package manually
解决方法: 看node_modules目录下是否有sequelize和mysql2 npm install --save sequelize npm install mysql2 --save
4. 执行exe时提示 不能创建目录。 PS G:\pkg> .\server.exe pkg/prelude/bootstrap.js:1876 throw error; ^
Error: Cannot mkdir in a snapshot. Try mountpoints instead. at mkdirFailInSnapshot (pkg/prelude/bootstrap.js:1636:7) at Object.mkdirSync (pkg/prelude/bootstrap.js:1648:12) at mkdir (C:\snapshot\pkg\node_modules\streamroller\lib\RollingFileWriteStream.js:270:19) 解决方法:通过代码走查 nodejs后端只有log4js(日志打印)中用到了目录创建,将其卸载 npm uninstall log4js -s 注释掉 所有使用 logUtil 的地方, 删除
重新打包 npm run pkg , 再次执行 .\****.exe, 通过。
5. 缓存里缺少相应的二进制文件fetched-v16.14.2-win-x64 $ pkg -t win server.js > [email protected] > Fetching base Node.js binaries to PKG_CACHE_PATH fetched-v16.14.2-win-x64 [ ] 0%> Not found in remote cache: {"tag":"v3.3","name":"node-v16.14.2-win-x64"} > Building base binary from source:
解决方案: https://segmentfault.com/a/1190000041958374?sort=votes 参考资料: pkg打包官网教程 https://www.npmjs.com/package/pkg
使用 pkg 打包 node服务端 项目 https://blog.csdn.net/u014675852/article/details/115915179
将Node.js项目打包为一个可执行文件 https://swmlee.com/2019/12/18/technicalessays/pack-nodejs-project/
一处打包,到处运行,用pkg打包nodejs应用! https://segmentfault.com/a/1190000041958374?sort=votes
将Node.js项目打包为一个可执行文件 https://swmlee.com/2019/12/18/technicalessays/pack-nodejs-project/
解决问题:无法加载文件 C:\Users\*\AppData\Roaming\npm\pkg.ps1,因为在此系统上禁止运行脚本。 https://blog.csdn.net/weixin_39729729/article/details/119766261
node v14.21.1下载地址 https://registry.npmmirror.com/binary.html?path=node/latest-v14.x/ 标签:node,打包,js,填坑,pkg,https,com,服务端 From: https://www.cnblogs.com/mazhenyu/p/16999104.html