nw加载node模块报错The specified module could not be found. C:\Users\zl\AppData\Local\Temp\nw243\lib\*.node

背景

nw应用打包成一个可执行的exe文件,先在网上找了一个简单的hello world熟悉了一下打包流程,hello world打包很顺利,然后打包自己的应用,因为在程序中加载了addon node模块,在执行打包后的exe报错。
在这里插入图片描述

打包

  1. 把所有的文件打包成一个zip压缩包。其中’.node’文件在BJSDK目录中,该文件在index.html中加载。
    在这里插入图片描述

注意:

  • 不要把所有文件放在一个文件夹中然后去压缩这个文件夹。
  • 最好压缩成zip包,尝试了压缩成rar和7z最终都打包失败了。
  1. 把src.zip压缩包重命名为‘*.nw’文件
    在这里插入图片描述
  2. 把app.nw复制到nw.exe同级目录下(nw下载地址),可以直接把app.nw拖到nw.exe上,测试是否运行正常。
    在这里插入图片描述
  3. 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等工具打包成一个安装包。

おすすめ

転載: blog.csdn.net/weixin_43398820/article/details/108512265