uni-app renderjs中使用bigint等新特性编译到app会报错

uni-app renderjs中使用bigint等新特性编译到app会报错

测试过的手机:

编译到任何手机均出现

操作步骤:

  • 在renderjs中写const aa = 123n;然后运行到app,比现

预期结果:

正常编译通过

实际结果:

Big integer literals are not available in the configured target environment (“es2015”)

bug描述:

renderjs中使用bigint等新特性,编译到app会报错。 在setup中写bigint新特性则不会,在renderjs中写就会。 你可能会问题能不能不要用bigint或者第三方bigint的兼容方案,答:不能。因为业务需求需要使用到的第三方依赖库中使用了bigint。 尝试过在vite.config中设置build: {target: "es2022"},esnext,es2020均无法解决,可以得知,编译普通代码是没问题的,只是编译renderjs代码才会出现此问题

Image from dcloud Image from dcloud

信息类别 详细信息
产品分类 uniapp/App
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 win11
HBuilderX类型 正式
HBuilderX版本号 3.8.12
手机系统 全部
页面类型 vue
vue版本 vue3
打包方式 云端
项目创建方式 HBuilderX

更多关于uni-app renderjs中使用bigint等新特性编译到app会报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html

8 回复

HBuilderX 3.97.2023110504-alpha 已修复。

更多关于uni-app renderjs中使用bigint等新特性编译到app会报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html


HBuilderX 3.98 版本 真机运行可以,调试报错! 在下边我贴出报错的地方

不用字面量,使用BigInt构造器构造呢

这个只是举例,我用的第三方库里面几百个地方这么写的,就算能改成构造器,但也不行,因为我肯定也不能去修改库的源代码去实现的。还是希望能修复这个bug

预计下个版本修复,编译renderjs时,以build.target为准 目前可以手动修改node_modules/@dcloudio/uni-app-vite/dist/vue/plugins/renderjs.js transformRenderjs方法中的target

真机上运行不报错,调试就报错。HBuilderX 3.98 版本



更新到3.98 设置target: ‘esnext’ 后编译报错 [plugin:uni:app-nvue-esbuild] exports is not defined

这个问题是由于renderjs模块的编译目标环境配置与主工程不一致导致的。renderjs默认使用较低的ES标准编译,导致不支持BigInt等新特性。

解决方案是在项目的manifest.json中为renderjs单独配置编译目标:

{
  "app-plus": {
    "renderjs": {
      "compilerOptions": {
        "target": "es2020"
      }
    }
  }
}

或者在vue.config.js中配置:

module.exports = {
  transpileDependencies: ['[@dcloudio](/user/dcloudio)/uni-app'],
  chainWebpack: config => {
    config.module
      .rule('renderjs')
      .use('babel')
      .tap(options => {
        options.presets[0][1].targets = { esmodules: true }
        return options
      })
  }
}
回到顶部