微信版本8.0.16,进入体验版小程序遇到基础库加载问题
发布于 6 年前 作者 tao69 4046 次浏览 来自 官方Issues

Can’t find variable: regeneratorRuntime 报错

iOS和安卓进入体验版小程序都有此问题。用8.0.15版微信进入无此问题。

小程序体验版采用的是CI上传,增强编译已开。

6 回复

工具需要开启编译选项【增强编译】(旧版)或者【将JS编译成ES5】

miniprogram-ci 上传代码需要开启编译选项【增强编译】

原因 应该是8.0.16版本的微信更新了新的灰度基础库;

【开发、体验】 版本的小程序,开直播插件触发了 微信的灰度;[解释:老版本微信正常]

我们的小程序是在开启了【小程序直播插件】 才会触发 这个报错;不开启,体验版正常;

该问题是由于旧版开发者工具/miniprogram-ci 或者第三方框架未能正确注入 regeneratorRuntime 导致的。

该报错只会影响开发者工具模拟器,以及开发版体验版小程序;不会影响正式版小程序。

可以先尝试更新开发者工具和 miniprogram-ci 到最新版后,开启【将 JS 编译成 ES5】编译选项。miniprogram-ci 需要开启 es7: true 选项。

若使用了第三方框架,则需要排查第三方框架的编译是否正确注入 regeneratorRuntime。

若急于使用开发版体验版进行开发测试,可以使用开发者工具中的【调试基础库】选择2.21.2基础库 ,并给真机推送来绕过该问题。


目前通过 CI 上传的需要开发者手动引入 runtime.js 进行适配,正式版暂不受影响,具体等官方公告通知。

嗯,我们也遇到了同样的问题。

留一个我们的解决办法给后面遇到类似情况的人:

我们在使用小程序 CI 上传代码前有一步预编译(不然代码包大小超标传不上去)。预编译采用了@babel/preset-env 这个插件。这个插件有用到 regeneratorRuntime,但是最近基础库不再暴露这个变量,需要我们自己引用。

最初尝试添加 @babel/transform-runtime 添加 regenerator 来解决,但插件越加越多,报错也越来越稀奇古怪。后来换了一个思路,让 @babel/preset-env 忽略 async await 语法的编译,把编译交给 CI 的增强编译 (es7: true) 来解决,最后成功。

附上 @babel/preset-env 的配置:

            [’@babel/preset-env’, {

                ‘targets’: {

                    ‘chrome’: 53,

                    ‘ios’: 8

                },

                ‘exclude’: [’@babel/plugin-transform-async-to-generator’, ‘@babel/plugin-transform-regenerator’] // 让 babel 忽略 async await 的编译

            }]

回到顶部