收藏
评论

regeneratorRuntime 相关报错排查指引官方

regeneratorRuntime is not defined
Can't find variable: regeneratorRuntime


该问题是由于 babel 编译时未能正确注入 regeneratorRuntime 导致的。

babel 会将高版本js语法,转换为低版本兼容的语法。regeneratorRuntime 是 babel 在对 js 中 async/await 语法进行转换时,会使用的 runtime 依赖。开发者工具的【将 JS 编译成 ES5】即是使用 babel 进行编译。

可以先尝试更新开发者工具和 miniprogram-ci 到最新版后,开启开发者工具的【将 JS 编译成 ES5】编译选项。miniprogram-ci 需要开启 es7: true (增强编译)选项。注意若使用第三方框架已经进行了 babel 编译;或者自行使用了 babel 编译,则不需要开启工具和 miniprogram-ci 的编译选项。

若使用了第三方框架,或者自行配置的 babel 配置,则需要检查是否正确注入 regeneratorRuntime。常见的解决方案是为 babel 配置添加插件 @babel/plugin-transform-runtime。


Function("r", "regeneratorRuntime = r") is not a function


该问题通常是正确引入了 regeneratorRuntime,但是误将 regeneratorRuntime 编译至了严格模式(即含有 'use strict' )。

regeneratorRuntime 由于会尝试通过不使用 var 关键字直接赋值的方式,来声明全局 regeneratorRuntime 变量。这种方式在严格模式下会报错,因而尝试使用 new Function 的形式从严格模式跳入非严格模式,再次进行全局变量声明。然而小程序环境下不允许使用 new Function,因而初始化失败。

该问题通常是由于重复打包/编译导致的,即第一次编译时将 regeneratorRuntime 识别为非严格模式,而第二次编译时由于失去原始信息,识别为严格模式。

需要排查打包路径是否重复经过了 babel 或 webpack 等编译或打包。若使用第三方框架已经进行了 babel 编译;或者自行使用了babel编译,则需要关闭开发者工具的【将 JS 编译成 ES5】编译选项和 miniprogram-ci 的 es7: true (增强编译)选项。


我的小程序并没有使用 async/await 语法,但也报错


如果你的小程序引入了插件,而有插件没有正确配置编译模式,同样会出现上述问题。建议排查是否是插件导致。如果确认是插件导致,则需要插件提供方参考本指引解决问题。

另外的,npm 模块、第三方框架等同样可能引入 regeneratorRuntime 依赖。


我的小程序在正式版没有以上问题,但开发者工具/开发版预览/体验版会有上面的报错


该问题是由于基础库 bug,在 2.21.3 版本之前误将 regeneratorRuntime 暴露到了全局,因而导致小程序即使没有正确注入 regeneratorRuntime,但也能够正常运行。

基础库 2.21.3 版本已将 regeneratorRuntime 从工具、开发版、预览版小程序&小游戏上移除,因此会看到报错。你可以参照上面的排查指引进行排查直至解决问题

基础库暂时没有移除正式版小程序的 regeneratorRuntime,因此你不用担心线上正式版小程序,也可以不用紧急修复该问题。


我的小程序只在某些低版本微信上出现上面的报错


低版本的基础库如 2.10.4 还没有误将 regeneratorRuntime 暴露到全局,因此只会在低版本出现该问题。

建议参照上面的排查指引进行排查直至修复解决问题。

34368浏览
最后一次编辑于  2022-01-17
知识库内容非实时更新,可能已过期、失效或不适用于当前情形,请谨慎参考
收藏
反馈

8 个评论

  • 散先森
    散先森
    2023-02-20

    使用 HBuilder 编译只需要添加 "es7": true 即可,配置如下:

    /* @file manifest.json */
    {
        "mp-weixin" : {
            "appid": "",
            "setting" : {
                "urlCheck" : false,
                "es6" : true,
                "es7" : true,
                "postcss" : true
            },
            "usingComponents" : true,
            "uniStatistics" : {
                "enable" : true
            }
        },
    }
    
    2023-02-20
    赞同 4
    回复 3
    • lt-刘同
      lt-刘同
      2023-11-15
      可以的,解决了
      2023-11-15
      1
      回复
    • 好运
      好运
      03-05
      这个可以,解决了
      03-05
      回复
    • 冬来
      冬来
      04-22
      你真优秀,解决了,点赞
      04-22
      回复
  • 新新合
    新新合
    2022-01-27

    请问,后期我们如何处理这个问题

    2022-01-27
    赞同 4
    回复
  • 蚂蚁蚂蚁蜻蜓
    蚂蚁蚂蚁蜻蜓
    2022-03-01

    你们能干点正事吗。开发者的时间也是时间,不要老是让我们在这些问题上浪费时间。

    2022-03-01
    赞同 2
    回复 1
    • TAOXIN
      TAOXIN
      2022-03-09
      请问你解决了吗
      2022-03-09
      1
      回复
  • 一路向前
    一路向前
    2022-01-25

    regeneratorRuntime is not defined

    Can't find variable: regeneratorRuntime

    1. 已经开启 将 JS 编译成 ES5 选项
    2. 没有使用三方插件


    还是报这个错误,能提供一种排查方法吗? 


    2022-01-25
    赞同 1
    回复
  • 天津老郭666
    天津老郭666
    02-08

    删除小程序,再重新打开就行了

    02-08
    赞同
    回复
  • 吴世鹏
    吴世鹏
    2023-09-09

    这个问题怎么在最新版本还有? 震惊

    2023-09-09
    赞同
    回复
  • 余良余粮鱼粮
    余良余粮鱼粮
    2022-06-20

    官方 解决一下这个问题:https://developers.weixin.qq.com/community/develop/doc/000ec2d22286204eb7fd7a53056800?highLine=ci

    2022-06-20
    赞同
    回复 1
    • 贤仔
      贤仔
      2022-07-12
      您好老师,我也遇到了这个问题,您解决了么?
      2022-07-12
      回复
  • 冲击波
    冲击波
    2022-01-17

    最新开发者工具怎么开启增强编译

    2022-01-17
    赞同
    回复 1
    • 游戏人生
      游戏人生
      2022-01-17
      去掉了,换了一个名字
      2022-01-17
      回复
登录 后发表内容