3分钟搞定!pkg构建脚本配置模板(附5个实战案例)
【免费下载链接】pkg 项目地址: https://gitcode.com/gh_mirrors/pkg/pkg
你还在为Node.js项目打包烦恼?本文提供即copy即用的pkg构建脚本模板,3分钟完成配置,解决跨平台部署难题。读完你将获得:
- 标准package.json scripts配置模板
- 5种常见场景实战案例
- 静态资源打包最佳实践
- 调试与测试技巧
什么是pkg(打包工具)
pkg是一款能将Node.js项目打包成可执行文件(Executable File)的工具,支持Windows、macOS和Linux三大平台。通过简单配置即可告别"必须安装Node环境"的部署痛点,特别适合分发独立应用程序。
项目核心代码入口:lib/bin.ts
基础配置模板
以下是适用于大多数项目的基础配置,直接复制到你的package.json中即可使用:
{
"scripts": {
"pkg:win": "pkg . --targets node18-win-x64 --output dist/app-win.exe",
"pkg:mac": "pkg . --targets node18-macos-x64 --output dist/app-mac",
"pkg:linux": "pkg . --targets node18-linux-x64 --output dist/app-linux",
"pkg:all": "npm run pkg:win && npm run pkg:mac && npm run pkg:linux",
"pkg:clean": "rimraf dist/*"
},
"pkg": {
"assets": ["views/**/*", "public/**/*"],
"targets": ["node18-win-x64", "node18-macos-x64", "node18-linux-x64"],
"outputPath": "dist"
}
}
实战场景案例
1. Express应用打包
以examples中的Express项目为例,需要特别处理视图文件和静态资源:
examples/express/package.json配置:
{
"pkg": {
"assets": ["views/**/*"],
"targets": ["node18"]
}
}
对应的入口文件examples/express/index.js需使用正确路径:
// 必须使用__dirname确保打包后资源可访问
app.use('/', express.static(__dirname + '/views'));
app.get('/', function (req, res) {
res.sendFile(__dirname + '/views/index.html');
});
2. 多平台并行构建
在项目根目录的package.json中配置并行构建命令:
"scripts": {
"pkg:parallel": "npm-run-all --parallel pkg:win pkg:mac pkg:linux"
}
需要先安装并行执行依赖:npm install npm-run-all --save-dev
3. 包含原生模块项目
处理如bcrypt等包含原生模块的项目,需在package.json中指定node版本:
"pkg": {
"targets": ["node18-win-x64"],
"scripts": "build.js",
"assets": "node_modules/bcrypt/**/*"
}
相关原生模块处理逻辑:lib/fabricator.ts
4. 最小化可执行文件
通过压缩和裁剪实现最小体积打包:
"scripts": {
"pkg:min": "pkg . --targets node18-linux-x64 --compress GZip --output dist/app-min"
}
压缩算法实现:lib/compress_type.ts
5. 测试驱动的打包流程
集成测试确保打包质量,参考项目根目录package.json的测试脚本:
"scripts": {
"test:pkg": "npm run build && pkg . && ./dist/app-linux --test",
"ci": "npm run lint && npm test && npm run test:pkg"
}
完整测试案例:test/test-50-package-json/
常见问题解决
静态资源找不到
确保:
- assets配置正确:
"assets": ["views/**/*"] - 代码中使用
path.join(__dirname, 'views')而非相对路径 - 检查lib/walker.ts中的资源遍历逻辑
打包后运行报错
- 检查Node.js版本兼容性,参考test/test-50-package-json-6/
- 使用
pkg --debug模式生成调试信息 - 验证依赖是否全部包含,可参考dictionary/中的模块定义
项目资源
通过以上模板和案例,你可以快速实现Node.js项目的跨平台打包。更多高级配置可参考项目源码或提交issue获取支持。
如果觉得本文有帮助,请点赞收藏,下期将带来"pkg高级优化:启动速度提升50%的实战技巧"。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



