欢迎光临散文网 会员登陆 & 注册

cocos creator更新后真机报错not node js file system!?SIR THIS WAY!!

2023-05-11 11:15 作者:32398302533_bili  | 我要投稿

有些人真机测试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就会报错不影响使用)

如果小高解决了您的问题,觉得带的蛮好的,就给我点赞吧。

cocos creator更新后真机报错not node js file system!?SIR THIS WAY!!的评论 (共 条)

分享到微博请遵守国家法律