cocos creator更新后真機(jī)報(bào)錯(cuò)not node js file system!?SIR THIS WAY!!
有些人真機(jī)測(cè)試cocos creator打包的微信小游戲會(huì)出現(xiàn)類(lèi)似這樣的錯(cuò)誤:

這其中其實(shí)是兩個(gè)主要錯(cuò)誤,一個(gè)是讀取不到src內(nèi)的settings.json。第二個(gè)是讀取不到gamecache。
先說(shuō)第一個(gè)問(wèn)題,我比較粗暴,直接改了engine-adapter.js中的源碼,將方法readJsonSync改為:
readJsonSync:function(t){
? ? wx.setEnableDebug({
? ? ? enableDebug: true
? ? });
? ? try{
? ? ? if(wx.getSystemInfoSync().platform=='devtools')
? ? ? {
? ?
? ? ? ? ? ? var e=a.readFileSync(t,"utf8");
? ? ? ? ? ? return JSON.parse(e)
? ? ? }
? ? ? else
? ? ? {? ? ?
? ? ? ? ? ? var fileNm=t.substring(t.lastIndexOf("/"));
? ? ? ? ? ? if(fileNm.indexOf('settings')!=-1)
? ? ? ? ? ? {?
? ? ? ? ? ? ? ? var json='直接粘貼成你src/settings.json中的內(nèi)容'
? ? ? ? ? ? ? ?return JSON.parse(json);
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? {
? ? ? ? ? ? ? ?var e=a.readFileSync(t,"utf8");
? ? ? ? ? ? ? return JSON.parse(e);
? ? ? ? ? ? }
? ? ? }
}
catch(e)
{
? console.warn(e);
}
},
這樣settings.json直接寫(xiě)在代碼里就寫(xiě)死了,也不用費(fèi)勁滿(mǎn)處去找了。
現(xiàn)在說(shuō)第二個(gè)問(wèn)題,找不到緩存gamecache,或者說(shuō)壓根沒(méi)有,更別提里面的cacheList.json文件了(PS:該文件可以在頂部的微信開(kāi)發(fā)者工具-》調(diào)試-》打開(kāi)調(diào)試目錄-》崩潰信息目錄中跳到上兩級(jí)文件夾中搜索獲得,可以發(fā)現(xiàn)該文件和其他緩存文件一起存放在電腦緩存的文件夾里,值得一提的是,電腦的cacheList的json文件中key以http://usr/開(kāi)頭,真機(jī)中則是wxfile://usr/,想得到最新的緩存可以清除所有緩存后構(gòu)建獲得。

而真機(jī)中該緩存的位置是下圖:

)
我們修改engine-adapter中的init方法為:
init:function(){
this.cacheDir=a()+"/"+this.cacheDir;
var e=this.cacheDir+"/"+this.cachedFileName,t=o(e);
!t||t instanceof Error||!t.version?(t instanceof Error||l(this.cacheDir,!0),this.cachedFiles=new cc.AssetManager.Cache,c(this.cacheDir,!0),r(e,JSON.stringify({files:this.cachedFiles._map,version:this.version}),"utf8")):this.cachedFiles=new cc.AssetManager.Cache(t.files),this.tempFiles=new cc.AssetManager.Cache
},
這個(gè)方法的意思就是三目一下,如果有緩存文件,就用該文件,沒(méi)就寫(xiě)。
可以發(fā)現(xiàn)只加了一個(gè)!t||,這里是他寫(xiě)代碼的一個(gè)失誤,如果只判斷t instanceof Error||!t.version,那么t為空時(shí)t.version會(huì)空指針異常,加上后就能正常在手機(jī)中加載緩存了,(PS:它運(yùn)行第一次還是會(huì)報(bào)錯(cuò)沒(méi)有發(fā)現(xiàn)資源,因?yàn)樗@里不管有沒(méi)有先讀一波,沒(méi)有wx.readfile就會(huì)報(bào)錯(cuò)不影響使用)
如果小高解決了您的問(wèn)題,覺(jué)得帶的蠻好的,就給我點(diǎn)贊吧。