<script lang="ts" setup>
import { onReady, onLoad } from '@dcloudio/uni-app'
class A {
private a: string
public b: string
c: string
constructor() {
this.a = undefined
this.b = undefined
this.c = undefined
}
}
class B {
private a: string
public b: string
c: string
}
onLoad(() => {
// 期望结果: { a: undefined, b: undefined, c: undefined }
console.log(new A()) // 运行结果: {}
console.log(new B()) // 运行结果: {}
})
</script>
- 发布:2023-10-11 18:10
- 更新:2024-01-16 11:41
- 阅读:279
【报Bug】hbuilderX 3.8.12 构建项目输出代码与cli 3.8.12存在差异, hx中点击发布H5, tsconfig 的 useDefineForClassFields 未生效
产品分类: uniapp/App
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: 11
HBuilderX类型: 正式
HBuilderX版本号: 3.8.12
手机系统: Android
手机系统版本号: Android 6.0
手机厂商: idata
手机机型: PDA
页面类型: vue
vue版本: vue3
打包方式: 云端
项目创建方式: HBuilderX
示例代码:
操作步骤:
编写一个class,并实例化
class B {
private a: string
public b: string
c: string
}
// 期望结果: { a: undefined, b: undefined, c: undefined }
console.log(new A()) // 运行结果: {}
编写一个class,并实例化
class B {
private a: string
public b: string
c: string
}
// 期望结果: { a: undefined, b: undefined, c: undefined }
console.log(new A()) // 运行结果: {}
预期结果:
console.log(new A()) // { a: undefined, b: undefined, c: undefined }
console.log(new A()) // { a: undefined, b: undefined, c: undefined }
实际结果:
console.log(new A()) // {}
console.log(new A()) // {}
bug描述:
经测试 hx 中构建的代码与 cli中构建的代码存在明显差异, 下列的bug在cli中不存在, 可以参考我最新上传demo项目
本机node版本: 16.17.0
cli版本: 3.8.12
hx版本: 3.8.12
tsconfig中已配置 useDefineForClassFields: true
{
"compilerOptions": {
"target": "esnext",
"module": "esnext",
"strict": true,
"jsx": "preserve",
"moduleResolution": "node",
"esModuleInterop": true,
"sourceMap": true,
"skipLibCheck": true,
"importHelpers": true,
"allowSyntheticDefaultImports": true,
"useDefineForClassFields": true,
"resolveJsonModule": true,
"lib": ["esnext", "dom"],
"types": ["@dcloudio/types"]
},
"exclude": ["node_modules", "unpackage"]
}
但 new 对象后的实例中依旧没有 相关属性, 按理此时结果应为 { a: undefined, b: undefined, c: undefined }
因项目中存在通过
if (key in obj) {
obj[key] = xxx
}
类的序列化操作, 所以实例内至少得存在该属性, 即使为undefined
测试项目在附件中
DCloud_UNI_OttoJi - 日常回复 uni-app/x 问题,如果艾特我没看到,请主动私信
感谢反馈,久等了。我使用新版本 hbuiderx 未能复现你的问题,可能是后续修复了这个问题。如果你还有问题,可以 reopen 继续反馈 ❤️
-
retrocode (作者)
你好, 我使用最新的 HX3.98 正式版测试问题依然存在, 应该是我没描述清楚的问题, 直接在HX里运行项目是没问题的, 但是发布H5, build之后生成的代码有这个问题, 可以参考我下列的图片
2024-01-15 16:49
DCloud_UNI_OttoJi - 日常回复 uni-app/x 问题,如果艾特我没看到,请主动私信
-
retrocode (作者)
cli版是没问题的, 主要问题在 hx 内, 也就是你打开项目不用 npm install , 而是直接把 src 文件夹拖到 hbuilderX 内, 运行也是没问题的, 仅也仅在 直接用 hbuilderX 内的 发行 => H5 编译, 生成的代码有问题, 运行到内置浏览器都是OK的, 我在下面增加了 截图, 和一个2分钟的录屏演示, 你可以看下.
2024-01-16 11:42
-
retrocode (作者)
主要如果是H5还好解决, 直接用 cli 版就好, 这个问题我最初弄纯nvue的app端发现的, 在纯nvue的app上也有这个问题, 我复现后发现 h5上也有相同问题, 就提的 H5了, app牵扯到云打包/插件这些, 必须使用 hx内的 发行功能打包, 所以不得不解决这个问题
2024-01-16 11:45
retrocode (作者) - 现已加入旺旺大礼包全家桶
cli版是没问题的, 主要问题在 hx 内, 也就是你打开项目不用 npm install , 而是直接把 src 文件夹拖到 hbuilderX 内, 运行也是没问题的, 仅也仅在 直接用hbuilderX 内的 发行 => H5 编译, 生成的代码有问题, 运行到内置浏览器都是OK的
下面这个截图是, 我用cli版的 npm run build:h5 编译, 和把 src拖到 hx 内用 发行 => H5 编译, 产生结果对比, Hx的结果是有问题的.
我录制了一个视频, 也许能让你更好的理解我这个bug, 已经更新到 hx 3.99 版了
https://test.retrocode.io/20240116_112614.mp4