将NodeJS项目打包,编译成跨平台的可执行文件

admin 2021-06-22 PM 2411℃ 0条

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.jsonPkg将遵循bin指定的属性package.json并将其用作入口文件。
  • 目录路径。Pkgpackage.json在指定目录中查找。看上面。

目标

pkg可以一次为多台目标机器生成可执行文件。您可以通过--targets 选项指定以逗号分隔的目标列表。规范目标由 3 个元素组成,以破折号分隔,例如node12-macos-x64node14-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的:可能建立x64arm64Rosetta 2但不是相反。
  • 窗户:有可能建立x64arm64x64 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/

标签: none

非特殊说明,本博所有文章均为博主原创。

评论啦~