使用pkg打包node项目

  • Post author:
  • Post category:其他


用node做了一个小工具,希望能在别的没有node的环境使用,然后发现 pkg 可以做到打包node工程为exe文件,于是就尝试了一下,遇到很多坑,小记一下:

1.安装pkg

npm install -g pkg

2.pkg打包基本用法:

pkg index.js // 打包为Linux, macOS, Windows可执行文件

pkg -t node14-win-x64 index.js // 打包为Windows可执行文件

pkg . // 根据package.json中的配置打包

3.使用package.json配置pkg打包:

{
   "bin": "XXX.js", // 入口文件,pkg通过package.json打包时必须配置
   ...
  "pkg": {
      "scripts": "build/**/*.js",  // 打包包含内容,也可以使用 [] 数组形式
      "asset": "views/**/*",  // 打包包含内容,也可以使用 [] 数组形式,例:[ "assets/**/*", "images/**/*" ]
      "options": [], // 可将一些运行时选项配置一起打包,填写选项可参考 node --help 、 node --v8-options 内的内容
      "targets": ["node14-linux-arm64"], // 指定打包的目标平台和Node版本
      "outputPath": "dist" // 打包后文件存放入 ./dist文件夹
      ...
   }
}
 "pkg": {
    "scripts": "build/**/*.js",
    "assets": "views/**/*",
    "targets": [ "node14-linux-arm64" ],
    "outputPath": "dist"
  }

更多用法可查看

官方文档

在打包时,遇到的问题:

(1)报错:

Fetching base Node.js binaries to PKG_CACHE_PATH 
fetched-v12.22.11-win-x64 [] 0%> Not found in remote cache: 
{"tag": "v3.4", "name": "node-v12.22.11-win-x64"} ...... 
Error! AssertionError [ERR_ASSERTION]:The expression evaluated to a falsy value: ....

解决: 在

Releases · vercel/pkg-fetch · GitHub

下载缺失的二进制文件(我这里是node-v12.22.11-win-x64),下载后改名为 fetched-v12.22.11-win-x64 ,放置于缓存地址 .pkg-cache 文件内的

v3.4文件夹

(可能不存在,自己创建)

(2) 我的项目有axios依赖包,打包axios时失败:

Warning Failed to make bytecode node12-x64 for file C:\snapshot\XXX\node_modules\axios\index.js
....

解决:将axios版本降低为 v0.27 ,参考:

此处

(3)打包后生成exe文件,双击运行,失败,发现找不到静态文件index.html

解决: 使用index.html文件时不再使用 ./index.html 这种形式的路径,改为使用 path.join(__dirname,”/index.html”) 的方式作为文件路径。



版权声明:本文为start_XUEBA原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。