cocos creator更新后真机报错not node js file system!?SIR THIS WAY!!
有些人真机测试cocos creator打包的微信小游戏会出现类似这样的错误:

这其中其实是两个主要错误,一个是读取不到src内的settings.json。第二个是读取不到gamecache。
先说第一个问题,我比较粗暴,直接改了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中的内容'
return JSON.parse(json);
}
else
{
var e=a.readFileSync(t,"utf8");
return JSON.parse(e);
}
}
}
catch(e)
{
console.warn(e);
}
},
这样settings.json直接写在代码里就写死了,也不用费劲满处去找了。
现在说第二个问题,找不到缓存gamecache,或者说压根没有,更别提里面的cacheList.json文件了(PS:该文件可以在顶部的微信开发者工具-》调试-》打开调试目录-》崩溃信息目录中跳到上两级文件夹中搜索获得,可以发现该文件和其他缓存文件一起存放在电脑缓存的文件夹里,值得一提的是,电脑的cacheList的json文件中key以http://usr/开头,真机中则是wxfile://usr/,想得到最新的缓存可以清除所有缓存后构建获得。

而真机中该缓存的位置是下图:

)
我们修改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
},
这个方法的意思就是三目一下,如果有缓存文件,就用该文件,没就写。
可以发现只加了一个!t||,这里是他写代码的一个失误,如果只判断t instanceof Error||!t.version,那么t为空时t.version会空指针异常,加上后就能正常在手机中加载缓存了,(PS:它运行第一次还是会报错没有发现资源,因为他这里不管有没有先读一波,没有wx.readfile就会报错不影响使用)
如果小高解决了您的问题,觉得带的蛮好的,就给我点赞吧。