此命令行界面使您可以将Node.js项目打包为可执行文件,甚至可以在未安装Node.js的设备上运行。
用例
- 在没有来源的情况下制作商业版的应用程序
- 在没有来源的情况下制作应用的演示/评估/试用版
- 立即为其他平台制作可执行文件(交叉编译)
- 制作某种自解压存档或安装程序
- 无需安装Node.js和npm来运行打包的应用程序
- 无需下载数百个文件
npm install
来部署您的应用程序。将其部署为单个文件 - 将您的资产放在可执行文件中,使其更具可移植性
- 针对新的Node.js版本测试您的应用程序而不安装它
用法
npm install -g pkg
安装后,运行pkg --help
不带参数以查看选项列表。
项目的入口点是强制CLI参数。它可能是:
- 输入文件的路径。假设它是
/path/app.js
,然后打包应用程序将以相同的方式工作node /path/app.js
- 路径
package.json
。Pkg
将遵循bin
指定的属性package.json
并将其用作条目文件。 - 目录的路径。
Pkg
将package.json
在指定的目录中查找。往上看。
目标
pkg
可以一次为多个目标计算机生成可执行文件。您可以通过--targets
选项指定以逗号分隔的目标列表。规范目标由3个元素组成,例如用短划线分隔,node6-macos-x64
或者node4-linux-armv6
:
- nodeRange节点$ {n}或最新
- 平台 freebsd,linux,alpine,macos,win
- arch x64,x86,armv6,armv7
您可以省略任何元素(并仅指定node6
)。省略的元素将从当前平台或系统范围的Node.js安装(其版本和拱门)中获取。还有一个别名host
,这意味着所有3个元素都取自当前的platform / Node.js。默认情况下,目标是 linux,macos,win
针对当前的Node.js版本和arch。
配置
在打包过程中,pkg
解析您的源,检测调用require
,遍历项目的依赖项并将它们包含在可执行文件中。在大多数情况下,您无需手动指定任何内容。但是,您的代码可能有require(variable)
调用(所谓的非文字参数require
)或使用非JavaScript文件(例如视图,CSS,图像等)。
require('./build/' + cmd + '.js')
path.join(__dirname, 'views/' + viewName)
此类案件不予处理pkg
。因此,您必须在文件的pkg
属性中手动指定文件 - 脚本和资产package.json
。
"pkg": {
"scripts": "build/**/*.js",
"assets": "views/**/*"
}
您还可以指定globs数组:
"assets": [ "assets/**/*", "images/**/*" ]
请务必致电pkg package.json
或pkg .
使用scripts
和assets
输入。
脚本
scripts
是水珠 或水珠的列表。指定为的文件scripts
将使用编译v8::ScriptCompiler
并放入可执行文件而不使用源。它们必须符合您所定位的Node.js版本的JS标准(参见目标),即已经过编译。
资产
assets
是水珠 或水珠的列表。指定的文件assets
将作为原始内容打包为可执行文件而不进行修改。Javascript文件也可以指定assets
。他们的消息来源不会被剥夺。它提高了这些文件的执行性能并简化了调试。
选项
可以使用运行时选项(属于Node.js或V8)调用Node.js应用程序。列出他们的类型node --help
或 node --v8-options
。您可以将这些运行时选项“烘焙”到打包的应用程序中。应用程序将始终在打开选项的情况下运行。只需--
从选项名称中删除。
pkg app.js --options expose-gc
pkg app.js --options max_old_space_size=4096
产量
您可以指定--output
是仅创建一个可执行文件还是--out-path
为多个目标放置可执行文件。
调试
通过--debug
以pkg
获得一个日志包装过程。如果您遇到某些特定文件的问题(似乎没有打包成可执行文件),查看日志可能会很有用。
建立
pkg
有所谓的“基本二进制文件” - 它们实际上是相同的 node
可执行文件,但应用了一些补丁。它们用作每个可执行文件pkg
创建的基础。pkg
在打包应用程序之前下载预编译的基本二进制文件。如果您更喜欢从源代码编译基本二进制文件而不是下载它们,您可以将--build
选项传递给pkg
。首先确保您的计算机满足编译原始Node.js:BUILDING.md的要求
打包应用的用法
对打包应用程序的命令行调用./app a b
相当于node app.js a b
来源: 开源中国