打包与发布


这篇指南文档将教会你如何打包与发布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 install安装且NPM版本小于3.0的情况下。在建立你的应用根目录时使用类似C:\build\这样的路径将尽可能避免这个问题。

准备 NW.js

为了让你的应用更好的运行,你必须重新编译发布NW.js。针对不同的需求和打包尺寸,NW.js提供了多个 编译版本。选择适合你的产品编版本格或者 从源码构建与编译

All files in the downloaded package should be redistributed with your product, except tools in SDK flavor including nwjc, payload and chromedriver.
除了SDK版本中的nwjc or nwjc.exe,下载的压缩包中其他的所有文件可以根据需要有选择的加入到你的产品中。

打包你的应用

有两种方式可以打包你的应用:普通文件或者ZIP压缩文件。

打包方式1:普通文件 (推荐方式)

在Windows和Linux系统上,你可以将你的应用所有相关文件与NW.js执行文件放在相同文件夹下一起发送给你的用户。确保nw (或 nw.exe) 与 package.json在相同的文件夹(或目录)下。 或者你可以把你的应用的所有相关文件放在一个单独的文件夹下,并将该文件夹命名为package.nw,该文件夹需要放在与nw (或 nw.exe)相同的文件夹(或目录)中。

在Mac系统中,新建名称为app.nw的文件夹,把你的应用所有相关文件放入其中,然后将app.nw文件夹放在nwjs.app/Contents/Resources/目录下即可。

推荐您使用该打包方式。

打包方式2:ZIP压缩文件

你可以将应用的所有相关文件打成一个名为package.nw的压缩包。在Windows与Linux系统中,将package.nw与NW.js可执行文件放到相同目录即可。而在Mac系统中,则将package.nw放到nwjs.app/Contents/Resources/目录下。

打包过大或者文件过多将导致启动缓慢

在启动时,NW.js会将压缩包解压缩到一个临时文件夹并读取。所以如果你打包的压缩包过大或者文件过多会导致启动缓慢。

在Windows和Linux系统中,你甚至可以隐藏你的压缩包,将压缩包与nwnw.exe合并为一个文件。
在Windows系统中执行以下命令:

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

在Linux系统中执行以下命令达到相同效果:

cat nw app.nw > app && chmod +x app 

不同平台区别

Windows

nw.exe 文件的图标可以用Resource Hacker工具来替换, nw-buildernode-winresourcer

你可以创建一个安装程序来部署所有必要文件到用户的系统。你可以使用Windows InstallerNSISInno Setup

Linux

在Linux系统中,你需要创建合适的.desktop 文件

要创建一个自动安装脚本,你可以使用sharmakeself

要通过包管理系统分发您的应用程序,比如aptyumpacman等,请按照他们的官方说明文档来创建包。

Mac OS X

在Mac OS X中,你需要修改下列文件,添加你自己的icon和boundle id:

To rename the application, the following files should be modified: * Contents/Info.plist - CFBundleDisplayName * Contents/Resources/en.lproj/InfoPlist.strings - CFBundleDisplayName * package.json – add a string field product_string (e.g. foobar); the helper application will be shown as ‘foobar Helper’. (since v0.24.4) * Contents/Versions/n.n.n.n/nwjs Helper.app/Contents/MacOS/nwjs Helper - rename the file to ‘foobar Helper’ * Contents/Versions/n.n.n.n/nwjs Helper.app/Contents/Info.plist - change CFBundleDisplayName * Contents/Versions/n.n.n.n/nwjs Helper.app - rename the directory to ‘foobar Helper.app’

你应该注册的你mac应用程序,否则当Gatekeeper选项被开启时用户将不能使用你的应用程序。查看提交到Mac应用商店了解详情。

参考资料

wiki of NW.js中可以找到更多工具帮助你打包应用。