收藏
回答

小程序基础库 2.17.3 及以后版本出现了引用第三方包后引发runtime相关报错,是否为bug?

小程序基础库 2.17.3 及以后版本出现了引用部分第三方包后引发了 ReferenceError: regeneratorRuntime is not defined 的报错。

但是在 2.17.3 之前的版本不会出现这个问题。

目前还发现,如果在同一个文件中加入任意的async语句,也会解决这个报错问题,所以很奇怪。

开发环境如下:

小程序基础库版本:2.17.3     小程序开发者工具版本:1.05.2106300


代码片段如下:

// app.js
import MPServerless from '@alicloud/mpserverless-sdk';  // 引用就会报错
App({
  onLaunch() {
    // 展示本地存储能力
    const logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)
    // 登录
    wx.login({
      success: res => {
        // 发送 res.code 到后台换取 openId, sessionKey, unionId
      }
    })
  },
  globalData: {
    userInfo: null
  },
  // async menubar(){}  在该文件加入任意async语句,就不会报错。所以很奇怪。
})


项目配置文件如下:

{
  "description": "项目配置文件",
  "packOptions": {
    "ignore": []
  },
  "setting": {
    "urlCheck": false,
    "es6": true,
    "enhance": true,
    "postcss": true,
    "preloadBackgroundData": false,
    "minified": true,
    "newFeature": false,
    "coverView": true,
    "nodeModules": false,
    "autoAudits": false,
    "showShadowRootInWxmlPanel": true,
    "scopeDataCheck": false,
    "uglifyFileName": false,
    "checkInvalidKey": true,
    "checkSiteMap": true,
    "uploadWithSourceMap": true,
    "compileHotReLoad": false,
    "lazyloadPlaceholderEnable": false,
    "useMultiFrameRuntime": true,
    "useApiHook": true,
    "useApiHostProcess": true,
    "babelSetting": {
      "ignore": [],
      "disablePlugins": [],
      "outputPath": ""
    },
    "enableEngineNative": false,
    "useIsolateContext": true,
    "userConfirmedBundleSwitch": false,
    "packNpmManually": false,
    "packNpmRelationList": [],
    "minifyWXSS": true,
    "showES6CompileOption": false
  },
  "compileType": "miniprogram",
  "libVersion": "2.18.0",
  "appid": "wx11a63104dee2c255",
  "projectname": "miniprogram-2",
  "debugOptions": {
    "hidedInDevtools": []
  },
  "scripts": {},
  "staticServerOptions": {
    "baseURL": "",
    "servePath": ""
  },
  "isGameTourist": false,
  "condition": {
    "search": {
      "list": []
    },
    "conversation": {
      "list": []
    },
    "game": {
      "list": []
    },
    "plugin": {
      "list": []
    },
    "gamePlugin": {
      "list": []
    },
    "miniprogram": {
      "list": []
    }
  }
}
最后一次编辑于  2021-07-08
回答关注问题邀请回答
收藏

3 个回答

  • commy
    commy
    2021-07-08

    基础库在过去的版本中,把自身带的regeneratorRuntime暴露在全局空间中,这个bug在新版本中修复了。

    如果第三方库或者代码中使用到它,需要自行引入。

    工具在使用增强编译功能去编译 async 语法时,会在该文件中引入regeneratorRuntime。


    2021-07-08
    有用 1
    回复 4
    • 加把劲骑士
      加把劲骑士
      2021-07-08
      感谢回复🙏,大致理解您的意思了。但是还有一个问题,就是这个问题只会在模拟器的情况下报错,而真机和预览都不会发生错误。不知道为什么会造成这个现象,如果真机中能运行成功的话,说明regeneratorRuntime 应该已经被引入了啊。(猜测或许是真机和模拟器的编译链路不同导致?)
      2021-07-08
      回复
    • commy
      commy
      2021-07-08回复加把劲骑士
      有可能真机和模拟器上的基础库版本不一样导致
      2021-07-08
      1
      回复
    • 加把劲骑士
      加把劲骑士
      2021-07-09回复commy
      好的,明白啦,谢谢
      2021-07-09
      回复
    • ES12
      ES12
      2022-01-07回复commy
      你好,我们这边也遇到该问题了,文件里使用了第三方包,第三包中使用了regeneratorRuntime,导致这个报错~ 然后我们试着在文件里加了async,可以解决这个报错

      但是奇怪的是,这个问题在线下通过minprogram-ci 发preview或者通过小程序开发者工具预览都会出现,但是线上环境没有问题(通过ci.upload进行构建上传的),而且我们的用户机型肯定覆盖了你说的升级后的基础库版本,按理说线上也会报bug?
      2022-01-07
      回复
  • HS
    HS
    2021-07-08

    截图看下 project.config.json 的项目配置呢?

    2021-07-08
    有用 1
    回复 4
    • 加把劲骑士
      加把劲骑士
      2021-07-08
      您好,感谢回复🙏,这个是项目的 project.config.json 配置
      2021-07-08
      回复
    • 加把劲骑士
      加把劲骑士
      2021-07-08
      完整的配置信息,编辑到正文里了
      2021-07-08
      回复
    • HS
      HS
      2021-07-08回复加把劲骑士
      真机预览和工具模拟器,是否都会报错呢?
      2021-07-08
      回复
    • 加把劲骑士
      加把劲骑士
      2021-07-08回复HS
      您好,目前真机调试和预览是可以正常运行的,但模拟器是会报错。
      2021-07-08
      回复
  • 加把劲骑士
    加把劲骑士
    2021-07-07

    这个问题在 2.10.4 及以前的基础库版本下也会出现,2.11.0 至2.17.0 版本是正常不报错的

    2021-07-07
    有用
    回复
登录 后发表内容