使用pkg对nodejs项目打包
pkg的介绍可以阅读官方说明。下面针对使用做一个简单的说明。
1. 安装, 假设需要将项目打包成 win-x86 下运行的软件包,需要确定使用的 pkg 和 pkg-fecth 的版本,目前最后一个支持 x86 的 pkg 为 4.5.1,pkg-fetch 则为 v2.6。
npm install -g pkg@4.5.1
2. 假设工程项目结构如下
myprj |_bin | |_mb1(自己定义的模块) | |_dist |_node_modules |_public | |_icons | |_image | |_javascripts | |_stylesheets |_routers |_views |_app.js |_appConfig.json |_package-lock.json |_package.json
那么 package 中 pkg 相关的配置如下。
{ "name": "myprj", ... "main": "app.js", // "scripts": { ... "pkg": "pkg . -t node12.16.1-win-x86 --out-path dist/" //注意pkg和-t之间的 . }, ... "pkg":{ "assets":["public/**/*","views/**/*"] //列出需要打包的项目文件 }, "bin":"app.js" //指定入口, 和pkg处的 。相对应 }
该处的 点 表示,使用package.json中的"bin"属性指定的文件作为入口。Path to package.json . Pkg will follow bin property of the specified package.json and use it as entry file.
3. 此时在项目根目录下运行如下命令即可完成打包。
npm run pkg
可能出现的问题:
1. 下载对应版本的fetched失败,那么需要手动下载所需版本,并将名称命名为 fetched-v12.16.1-win-x86 注意匹配。将给文件放置到环境变量PKG_CACHE_PATH所指定的文件夹,默认是用户的主文件夹 ~/.pkg-cache, 即 C:\Users\当前用户名\.pkg-cache\v2.6
2. 如果需要打包后的软件需要在运行时读取外部配置文件,则可如下处理
var cfg = require(path.resolve(process.cwd(),'./appConfig.json'));