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代码才会出现此问题
信息类别 | 详细信息 |
---|---|
产品分类 | 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
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
})
}
}