在升級(jí)Node和Electron版本后,在某些機(jī)器上打包發(fā)布時(shí)出現(xiàn)了下面的異常:
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' }
但是怪異的是本地編譯運(yùn)行是沒(méi)問(wèn)題的,但是一旦打包成asar運(yùn)行就會(huì)出現(xiàn)問(wèn)題,通過(guò)崩潰信息可以知道問(wèn)題出在xml2js這個(gè)庫(kù),解壓生成的asar文件,發(fā)現(xiàn)node_modules/xml2js/lib/目錄下面并沒(méi)有builder.js這個(gè)文件,本地編譯的node_modules中明明是有的,將本地的builder.js文件拷貝到asar解壓后的目錄中,再次運(yùn)行,發(fā)現(xiàn)可以正常運(yùn)行了,真是很神奇。
現(xiàn)在的問(wèn)題就是為什么打包的時(shí)候不會(huì)把這個(gè)文件一起打包進(jìn)去,查看了打包的代碼,發(fā)現(xiàn)也并沒(méi)有忽略掉builder.js這個(gè)文件,grep一下整個(gè)項(xiàng)目發(fā)現(xiàn)builder.js這個(gè)關(guān)鍵字基本沒(méi)有,這就不是神奇,而是詭異了,把本地的node_modules/xml2js/lib/builder.js文件進(jìn)行改名,比如改為xbuilder.js,然后將xml2js.js中對(duì)應(yīng)的引用也改為require('./xbuilder'),然后進(jìn)行打包編譯,運(yùn)行,發(fā)現(xiàn)可以正常運(yùn)行。
改名后,可以正常運(yùn)行,那說(shuō)明可能在某個(gè)地方將builder.js過(guò)濾掉了,但是一直也找不到相關(guān)的代碼,更詭異的是我把builder.js改為xbuilder.js是可以的(甚至不帶builder關(guān)鍵字都可以),但是改為builder2.js就不行了,也是醉了,更更詭異的是相同的代碼,相同的環(huán)境,在其他的電腦上就是好的,只能呵呵了。
目前也沒(méi)有其他方案,暫時(shí)也只能這樣了。