打包和分发


本文档指导您如何打包和分发基于 NW.js 的应用程序。

快速入门

您可以使用以下工具自动打包您的基于 NW.js 的应用程序以进行分发。

或者,您可以使用以下说明手动构建您的应用程序。

准备您的应用

在打包之前,您应该准备好所有必要的文件。查看以下清单以确保您没有遗漏任何内容。

警告

不要假设针对一个平台的 node_modules 在所有平台上都能直接使用。例如 node-email-templates 有针对 Windows 和 Mac OS X 的特定 npm install 命令。此外,它需要 Python 才能正确安装,而 Python 在 Windows 上默认没有安装。
作为经验法则,在您目标的每个平台上 npm install 您的 package.json 以确保一切按预期工作。

文件名和路径

在大多数 Linux 和一些 Mac OS X 上,文件系统是区分大小写的。这意味着 test.jsTest.js 是不同的文件。确保您的应用程序中使用的路径和文件名大小写正确。否则,您的应用程序在这些文件系统上可能会出现错误或崩溃。

Windows 上的路径长度

您的应用程序中使用的路径长度可能会超过 Windows 上的最大长度(260 个字符)。这会导致各种构建失败。这通常发生在使用旧版本 NPM(<3.0)通过 npm install 安装依赖项时。请在根目录中构建您的应用程序,例如 C:\build\,以尽可能避免此问题。

准备 NW.js

您必须将 NW.js 与您的应用程序一起重新分发,才能使您的应用程序运行。NW.js 提供了多种 构建版本,以满足不同的需求和包大小。为您的产品选择合适的构建版本,或者 从源代码构建

下载的包中的所有文件都应该与您的产品一起重新分发,除了 SDK 版本中的工具,包括 nwjcpayloadchromedriver

打包您的应用

打包应用程序有两种选择:普通文件或 zip 文件。

在 Windows 和 Linux 上,您可以将应用程序的文件放在与 NW.js 二进制文件相同的文件夹中,然后将它们交付给您的用户。确保 nw(或 nw.exe)与 package.json 位于同一个文件夹中。或者,您可以将应用程序的文件放在名为 package.nw 的文件夹中,该文件夹与 nw(或 nw.exe)位于同一个文件夹中。

在 Mac 上,将应用程序的文件放入 nwjs.app/Contents/Resources/ 中名为 app.nw 的文件夹中,就完成了。

这是打包应用程序的推荐方法。

打包选项 2. 压缩文件

您可以将所有文件打包到一个 zip 文件中,并将其重命名为 package.nw。然后将其与 Windows 和 Linux 的 NW.js 二进制文件放在一起。对于 Mac,将其命名为 app.nw 并将其放在 nwjs.app/Contents/Resources/ 中。

大型包或过多文件会导致启动缓慢

在启动时,NW.js 会将包解压缩到临时文件夹中,并从那里加载。因此,如果您的包很大或包含太多文件,启动速度会变慢。

在 Windows 和 Linux 上,您甚至可以通过将 zip 文件附加到 nwnw.exe 的末尾来隐藏 zip 文件。
您可以在 Windows 上运行以下命令来实现此目的

copy /b nw.exe+package.nw app.exe

或在 Linux 上运行以下命令
cat nw package.nw > app && chmod +x app 

平台特定步骤

Windows

可以使用 Resource Hackernw-buildernode-winresourcer 等工具替换 nw.exe 的图标。

您可以创建一个安装程序,将所有必要的文件部署到最终用户的系统上。您可以使用 Windows InstallerNSISInno Setup

Linux

在 Linux 上,您需要创建正确的 .desktop 文件

要创建自解压安装程序脚本,可以使用 sharmakeself 等脚本。

要通过包管理系统(如 aptyumpacman 等)分发您的应用程序,请遵循其官方文档创建包。

Mac OS X

在 Mac OS X 上,您需要修改以下文件以拥有自己的图标和捆绑 ID

  • Contents/Resources/nw.icns:应用程序的图标。nw.icns 采用 Apple Icon Image Format 格式。您可以使用 Image2Icon 等工具将 PNG/JPEG 格式的图标转换为 ICNS 格式。
  • Contents/Info.plist:Apple 包描述文件。您可以查看 Implementing Cocoa’s Standard About Panel,了解此文件将如何影响您的应用程序以及您应该修改哪些字段。

要重命名应用程序,应修改以下文件
* Contents/Info.plist - CFBundleDisplayName
* Contents/Resources/en.lproj/InfoPlist.strings - CFBundleDisplayName
* Contents/MacOS/nwjs - 如果您更改了 CFBundleExecutable,请将文件重命名为其值
* package.json – 添加一个字符串字段 product_string(例如 foobar);辅助应用程序将显示为“foobar Helper”。(从 v0.24.4 开始)
* Contents/Frameworks/nwjs Framework.framework/Versions/n.n.n.n/nwjs Helper.app/Contents/MacOS/nwjs Helper.app - 将目录重命名为“foobar Helper.app”,以及另外三个辅助程序
* Contents/Frameworks/nwjs Framework.framework/Versions/n.n.n.n/nwjs Helper.app/Contents/MacOS/nwjs Helper.app/Contents/Info.plist - 更改 CFBundleDisplayName,以及另外三个辅助程序

您应该对您的 Mac 应用程序进行签名,否则如果 Gatekeeper 处于开启状态,用户将无法启动该应用程序。有关详细信息,请参阅Mac App Store 支持

参考资料

有关打包应用程序的更多工具,请参阅NW.js 的 wiki