背景
nw应用打包成一个可执行的exe文件,先在网上找了一个简单的hello world熟悉了一下打包流程,hello world打包很顺利,然后打包自己的应用,因为在程序中加载了addon node模块,在执行打包后的exe报错。
打包
- 把所有的文件打包成一个zip压缩包。其中’.node’文件在BJSDK目录中,该文件在index.html中加载。
注意:
- 不要把所有文件放在一个文件夹中然后去压缩这个文件夹。
- 最好压缩成zip包,尝试了压缩成rar和7z最终都打包失败了。
- 把src.zip压缩包重命名为‘*.nw’文件
- 把app.nw复制到nw.exe同级目录下(nw下载地址),可以直接把app.nw拖到nw.exe上,测试是否运行正常。
- app.nw和nw.exe打包成一个可执行程序
copy /b nw.exe+app.nw app.exe
注意:
- nw.exe+app.nw ,nw.exe必须在app.nw前面
最终生成了一个app.exe,点击运行报错
Uncaught Error: The specified module could not be found.
C:\Users\ADMINI~1\AppData\Local\Temp\nw24516_27973\BJSDK\windows\lib_32\bjcast_project_addon.node
分析
执行打包后的exe会默认在c盘temp目录下新建一个临时的目录,它会从这个目录下加载资源。手动查看该目录下可以看到node文件是存在的。
当时怀疑是copy /b这步出现了问题,查找了一些资料在nw issue中找到了答案https://github.com/nwjs/nw.js/issues/199
这个应该是nw的一个bug。
解决
方案一.
重命名app.exe为nw.exe
重命名后node模块可以正常加载了。
方案二
应用的名字只能为nw.exe显然是不合理,可以借助工具来重命名自己想要的名字,具体使用可以参考下面的demo
https://github.com/asinbow/nw-addon-demo
这个工具实测是可行的,只需要更改其中的build.js就可。
最终可以通过Enigma Virtual Box或者Inno Setup Compiler等工具打包成一个安装包。