如何在package.json中用Node.js最新原生单可执行功能替代pkg?
改用Node.js原生单可执行文件的配置方案
Node.js 20及以上版本支持原生单可执行文件(SEA)功能,替代pkg工具的话,按以下步骤配置:
1. 创建SEA配置文件
在项目根目录新建sea-config.json,内容如下:
{ "main": "./build/main.js", "output": "./sea-prep.blob" }
2. 安装依赖工具
需要postject来注入二进制blob,执行安装命令:
npm install postject --save-dev
3. 配置package.json的编译脚本
替换原来的compile脚本,新增以下内容:
"scripts": { "prepare-sea": "node --experimental-sea-config sea-config.json", "compile-linux": "cp $(command -v node) release/server && npx postject release/server NODE_SEA_BLOB ./sea-prep.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2", "compile-macos": "cp $(command -v node) release/server && npx postject release/server NODE_SEA_BLOB ./sea-prep.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2", "compile-windows": "copy \"%ProgramFiles%\\nodejs\\node.exe\" release\\server.exe && npx postject release\\server.exe NODE_SEA_BLOB ./sea-prep.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2", "compile": "npm run prepare-sea && npm run compile-$(shell uname | tr '[:upper:]' '[:lower:]')" }
脚本说明
prepare-sea:通过Node.js的实验性SEA配置,生成包含应用代码的二进制blob文件compile-linux/compile-macos/compile-windows:复制当前系统的Node可执行文件,再用postject将blob注入,生成最终的单可执行文件compile:Linux/macOS下可直接执行,自动匹配系统编译命令;Windows需单独执行npm run compile-windows
注意事项
- 确保使用Node.js 20+版本(推荐22),SEA功能在高版本中兼容性更好
- Windows系统的Node可执行文件路径需根据实际安装位置调整
- SEA目前仍为实验性功能,若项目依赖特殊Node.js API,需提前测试兼容性
内容的提问来源于stack exchange,提问作者Gorilka
相关产品推荐
相关产品推荐

