ExtJS Sencha CMD 打包异常报错分析处理 - 1

一般在布署时会将文件编译打包成一个文件,这样可以节省空间,提高加载速度,但平时在开发时运行的正常的程序,编译之后就各种报错,有些都是完全看不懂,这里将日常使用中的故障都记录一下
目前的项目使用的是通用模式,项目即有经典,也有现代风格,程序自动识别加载适合终端的界面.
Sencha Cmd版本: v7.6.0.87
ExtJs SDK版本:7.6

  生成未加密的JS代码,方便找问题
  sencha app build -testing
  
  生产模式打包,生成混淆代码:
  sencha app build --production

app.json 文件,在JS项中,配置默认输出支持 ES6 代码方式以适应一下时代,默认输出是ES5,通过查看变量定义有没有将let,改成var就很好分辨

"output": {
    "base": "${workspace.build.dir}/${build.environment}/${app.name}",
    "page": "index.html",
    "manifest": "${build.id}.json",

    "js": {
        "path": "${build.id}/app.js",
        "version": "ES6"
    },
    "appCache": {
        "enable": false
    },
    "resources": {
        "path": "${build.id}/resources",
        "shared": "resources"
    }
},

2022年10月10日16:41:03
有时通过了testing编译,运行正常,但production编译时还是会出错,我这遇到了通过了production,在内网中运行正常但布署到外网,还是报错,所以需要有耐心来解决这些问题
这次报错,点错误连接,定位到错误代码,估摸着可能真有问题,就着重错误定位来解决,有时感觉还定位不到错误源头代码

app.js?_dc=20221008151621:20 TypeError: undefined is not iterable (cannot read property Symbol(Symbol.iterator))
at Function.all ()
at app.js?_dc=20221008151621:20:149870
at app.js?_dc=20221008151621:20:107685
at Fe (app.js?_dc=20221008151621:20:102126)
at Ue (app.js?_dc=20221008151621:20:102602)
at IDBTransaction. (app.js?_dc=20221008151621:20:102966)

2022年10月10日20:59:07
问题终于得到解决,

app.js有段代码,这里面的代码固定不动,大概如下:

launch: function () {
    //调用了一个异步代码,返回使用是Promise
    Test.Init().then(function () {
		//代码
		console.log("2");
    });
},

Test.js文件 使用了Dexie.js库对IndexedDB一些操作,所以内部还有一些异步操作,一直在尝试使用Promise来解决问题,但不管怎么弄,都是报错,之前的说是在内网不错,在外网出错,是说错了,其实一个操作没有运行相关代码,所以没有激发而已,只是testing编译不出错,而production编译就出错了.
出错的代码,大概如下:

Init: function () {
        /**
         * Dexie.async(function* () {}); Return Function
         * Dexie.spawn(function* () {}); Return Promise
         */
        return Dexie.spawn(function* () {
            let rec = yield code();
        });
    }

最后终于打算改方式了,使用同步关键字async await,再次编译production并运行错误消失
注意async await的使用,正常改好的运行代码如下:

Init: async function () {
	let me = this;
    async function fnInit(me) {
        let rec = await code();
        console.log("1");
    };
    await fnInit(me);
},

完美解决,希望也能帮到有需要的朋友,另外吐槽一下SenchaArchitect是个极好的工具,可视化操作真的好方法,但好多骚操作就无法进行了,比如怎么这样使用async await就不知道怎么弄,也不能建立通用universal的项目.要不然真不想转IDE来coding…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MetaEnchanter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值