惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
MongoDB | Blog
MongoDB | Blog
博客园_首页
博客园 - 三生石上(FineUI控件)
博客园 - 聂微东
B
Blog RSS Feed
D
Docker
IT之家
IT之家
大猫的无限游戏
大猫的无限游戏
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
阮一峰的网络日志
阮一峰的网络日志
罗磊的独立博客
Recent Announcements
Recent Announcements
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
A
About on SuperTechFans
The GitHub Blog
The GitHub Blog
G
Google Developers Blog
V
V2EX
量子位
雷峰网
雷峰网
月光博客
月光博客
云风的 BLOG
云风的 BLOG
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Tailwind CSS Blog

博客园 - 3D入魔

make编译时fatal error: codecvt: No such file or directory解决方法 c++ 输入文件流ifstream用法详解[转] Ubuntu下,已经编译了OSG,如何增加OsgFbx插件,支持读取.fbx格式文件[转] vscode一键配置C/C++多个C及CPP文件编译与tasks.json和launch.json原理【转】 ecvt()、strtod()、strtoul() sscanf,sscanf_s及其相关用法[转] OSG3.4.0静态库编译(VS2019) 新手填坑--国产统信UOS操作系统上编译OpenScenGraph(OSG)3.4(附编译成果.so)2023年1月 GPL、BSD、MIT、Mozilla、Apache 和 LGPL 六种开源协议选择 一图解决 nodejs express multer 中文名乱码【转】 Cesium加载离线地图和离线地形【转】 WebXR 技术调研 - 在浏览器中构建扩展现实(XR)应用【转】 Cesium+vue 制作风流场【转】 实景三维电子沙盘 Cesium建筑自定义光源效果[转] 数字孪生城市 三维数字沙盘+GIS = F3DGIS 实战!使用pano2vr生成html5全景页面【转】 Cesium 使用MediaStreamRecorder 或者MediaRecorder录屏并下载视频,以及开启摄像头录像。【转】
pkg 打包node服务端 填坑记录!!
3D入魔 · 2022-12-22 · via 博客园 - 3D入魔

产品服务端使用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相对还是简单的。
----------------------------------------------------------------------------------------------------------------------------------------

// 遇到的问题总结

1. pkg与node版本不一致问题

当我们执行pkg -t win index.js 命令进行打包时会收到以下error提示

PS G:\pkg> pkg -t win index.js

> pkg@5.8.0

> Error! No available node version satisfies 'node13'

解决方法:将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

> pkg@5.6.0

> 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/