在升级Node和Electron版本后,在某些机器上打包发布时出现了下面的异常:
App threw an error when running { Error: Cannot find module './builder'
at Module._resolveFilename (module.js:470:15)
at Function.Module._resolveFilename (/usr/share/mixun/resources/electron.asar/common/reset-search-paths.js:35:12)
at Function.Module._load (module.js:418:25)
at Module.require (module.js:498:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/usr/share/mixun/resources/mixun.asar/node_modules/xml2js/lib/xml2js.js:10:13)
at Object.<anonymous> (/usr/share/mixun/resources/mixun.asar/node_modules/xml2js/lib/xml2js.js:37:4)
at Object.<anonymous> (/usr/share/mixun/resources/mixun.asar/node_modules/xml2js/lib/xml2js.js:39:3)
at Module._compile (module.js:571:32)
at Object.Module._extensions..js (module.js:580:10) code: 'MODULE_NOT_FOUND' }
但是怪异的是本地编译运行是没问题的,但是一旦打包成asar运行就会出现问题,通过崩溃信息可以知道问题出在xml2js
这个库,解压生成的asar文件,发现node_modules/xml2js/lib/
目录下面并没有builder.js
这个文件,本地编译的node_modules中明明是有的,将本地的builder.js
文件拷贝到asar解压后的目录中,再次运行,发现可以正常运行了,真是很神奇。
现在的问题就是为什么打包的时候不会把这个文件一起打包进去,查看了打包的代码,发现也并没有忽略掉builder.js
这个文件,grep一下整个项目发现builder.js
这个关键字基本没有,这就不是神奇,而是诡异了,把本地的node_modules/xml2js/lib/builder.js
文件进行改名,比如改为xbuilder.js
,然后将xml2js.js
中对应的引用也改为require('./xbuilder')
,然后进行打包编译,运行,发现可以正常运行。
改名后,可以正常运行,那说明可能在某个地方将builder.js
过滤掉了,但是一直也找不到相关的代码,更诡异的是我把builder.js
改为xbuilder.js
是可以的(甚至不带builder关键字都可以),但是改为builder2.js
就不行了,也是醉了,更更诡异的是相同的代码,相同的环境,在其他的电脑上就是好的,只能呵呵了。
目前也没有其他方案,暂时也只能这样了。