https://github.com/vercel/pkg
免责声明:pkg
是为在容器中使用而创建的,不适用于无服务器环境。对于那些使用 Vercel 的人来说,这意味着不需要pkg
在您的项目中使用,因为它提供的好处不适用于该平台。
此命令行界面使您可以将 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 个元素组成,以破折号分隔,例如node12-macos-x64
或node14-linux-arm64
:
- nodeRange (node8)、node10、node12、node14、node16 或最新
- 平台alpine,linux,linuxstatic,win,macos,(freebsd)
- arch x64, arm64, (armv6, armv7)
(element) 不受支持,但您可以尝试自己编译。
您可以省略任何元素(并仅指定node14
示例)。省略的元素将从当前平台或系统范围的 Node.js 安装(其版本和架构)中获取。还有一个 alias host
,这意味着所有 3 个元素都取自当前平台/Node.js。默认情况下,目标是 linux,macos,win
针对当前的 Node.js 版本和架构。
如果你想为不同的架构生成可执行文件,请注意默认情况下pkg
必须运行目标架构的可执行文件 来生成字节码:
- Linux:使用QEMU配置 binfmt 。
- MacOS的:可能建立
x64
在arm64
有Rosetta 2
但不是相反。 - 窗户:有可能建立
x64
在arm64
有x64 emulation
但不是相反。 - 或者,禁用字节码生成
--no-bytecode --public-packages "*" --public
。
macos-arm64
是实验性的。请注意强制性代码签名要求。最终的可执行文件必须使用codesign
macOS 的实用程序进行签名(临时签名就足够了),否则最终用户根本无法允许它运行。pkg
如果您pkg
在 macOS 上运行,则临时签署最终的可执行文件。最好,您应该将此签名替换为您自己信任的 Apple Developer ID。
NodeJs pkg 打包慢,在https://github.com/vercel/pkg-fetch 下载相应的包到 {User}/.pkg-cache/v2.x/