在小程序开发中遇到引入npm组件库后出现报错无法定位
根据报错进行任务执行的堆栈信息,但是非常可惜,小程序的报错在内部文件,无法准确定位,在windows下面报错信息主要是__g is not,通过排查,去掉“lazyCodeLoading”: “requiredComponents”后相关的报错立即就消失了。
搜索了下相关的文章,发现这个配置引起的问题还是比较多的。建议大家在app.json添加配置的时候能认真写好配置的用途。写这么多非常非常想让大家记住的就是我们在面对问题的时候多换下思路。 WAServiceMainContext.js:2 TypeError: Cannot read property 'setData' of null at Lo.onShow (:99:21)
windowsx相关报错提示 ReferenceError: __g is no
删除app.json内的
“lazyCodeLoading”: “requiredComponents”
Mac中报错形式
lazyCodeLoading
基础库 2.11.1 及以上版本支持,2.11.1 以下兼容但无优化效果
通常情况下,在小程序启动期间,所有页面及自定义组件的代码都会进行注入,当前页面没有使用到的自定义组件和页面在注入后其实并没有被使用。
自基础库版本 2.11.1 起,小程序支持有选择地注入必要的代码,以降低小程序的启动时间和运行时内存。
{
"lazyCodeLoading": "requiredComponents"
}
启用组件懒注入后,小程序性能确实得到了一定提升,速度快了很多,但是却遇到一个奇葩的问题,有个确认支付页面打不开了。
经核查,原因是这样的,app.json中没注册该页面路由(我们的页面路由是自动生成的,这个确认支付页面开发者命名不规范,没有自动生成,一言难尽,这里不多说了…)。
关于路由注册,微信小程序内部机制采用了2套标准:
- 不使用lazyCodeLoading,不抛错,可以正常访问;
- 使用lazyCodeLoading,报错:“页面不存在”
最终解决方案,修改路由生成规则,兼容遗漏的这个支付页面的路由。