- 发布:2025-12-13 19:50
- 更新:2025-12-13 19:51
- 阅读:18
产品分类: uniapp/App
PC开发环境操作系统: Mac
PC开发环境操作系统版本号: 15.7.2
HBuilderX类型: 正式
HBuilderX版本号: 4.87
手机系统: 全部
页面类型: vue
vue版本: vue3
打包方式: 云端
项目创建方式: HBuilderX
测试过的手机:
示例代码:
<script lang="ts">
// #ifdef H5
console.log('Index')
// #endif
export default {
data() {
return {
title: 'Hello'
}
},
onLoad() {},
methods: {
}
}
</script>
<script lang="ts">
// #ifdef H5
console.log('Index')
// #endif
export default {
data() {
return {
title: 'Hello'
}
},
onLoad() {},
methods: {
}
}
</script> 操作步骤:
1、创建一个新的uni-app项目
2、页面脚本添加ts支持 <script lang="ts">
3、脚本或者模板中添加条件编译
4、本地打包/云打包时开启sourcemap,
或者vite.config.js中增加build: {sourcemap: true}
<script lang="ts">
// #ifdef H5
console.log('Index')
// #endif
export default {
data() {
return {
title: 'Hello'
}
},
onLoad() {},
methods: {
}
}
</script>
1、创建一个新的uni-app项目
2、页面脚本添加ts支持 <script lang="ts">
3、脚本或者模板中添加条件编译
4、本地打包/云打包时开启sourcemap,
或者vite.config.js中增加build: {sourcemap: true}
<script lang="ts">
// #ifdef H5
console.log('Index')
// #endif
export default {
data() {
return {
title: 'Hello'
}
},
onLoad() {},
methods: {
}
}
</script> 预期结果:
正常打包生成sourcemap
正常打包生成sourcemap
实际结果:
生成失败,报错信息"Multiple conflicting contents for sourcemap source xxx/xxx/uniapp-demo/pages/index/index.vue"
生成失败,报错信息"Multiple conflicting contents for sourcemap source xxx/xxx/uniapp-demo/pages/index/index.vue"
bug描述:
项目只要开启sourcemap就一直打包失败,最近定位了下原因发现是页面开启了ts同时有条件编译导致生成失败,可能的原因是打包时loader移除条件编译符前后有两次注入,而文件名相同脚本内容不一样就会有冲突,提示"Multiple conflicting contents for sourcemap source ..."。
纯ts文件包含条件编译不会有问题。
| 文件类型 | 有条件编译 | 生成 sourcemap | 是否冲突 |
|---|---|---|---|
.ts 文件 |
✅ | ✅ | ✅ 没问题 |
.vue <script> |
✅ | ✅ | ✅ 没问题 |
.vue <script lang="ts"> |
❌ | ✅ | ✅ 没问题 |
.vue <script lang="ts"> |
✅ | ✅ | ❌ 有问题 |
该bug反馈内容完整且专业,问题描述清晰:明确指出Vue3项目中.vue文件同时启用TypeScript和条件编译时开启sourcemap会导致打包失败,错误提示"Multiple conflicting contents for sourcemap source"。提供了可验证的对比表格、直接可用的代码示例及详细复现步骤,分类信息包含HBuilderX 4.87版本、Mac环境等关键细节,官方人员可据此精准复现问题。
根据知识库分析,bug成立。依据包括:
- 知识库确认uni-app支持条件编译和TypeScript("uni-app的vue3模式:vue文件及nvue文件均支持最新版ts")
- 明确说明编译器处理流程("编译器支持条件编译...将.vue文件编译为js代码")
- sourcemap生成机制文档("在HBuiderX中生成sourceMap文件")未提及此组合限制
- 错误本质是编译流程中条件编译处理与TypeScript编译对sourcemap的映射冲突,符合Vite编译原理
非概念性问题:用户正确使用lang="ts"和条件编译语法(// #ifdef H5),操作符合TypeScript支持文档规范。问题源于编译链中两次内容转换导致sourcemap源文件冲突,属真实兼容性缺陷。
建议解决方案:
- 升级HBuilderX至最新版(当前反馈4.87可能存在已修复版本)
- 尝试在tsconfig.json中调整sourceMap配置
- 若持续存在,需官方修复编译流程中条件编译与TypeScript的sourcemap映射逻辑,参考编译器文档排查Vite插件冲突
AI问答小助手 - AI智答引擎,优解尽在掌握!
这是一个已知的问题,当在 Vue 文件的 <script lang="ts"> 中使用条件编译并开启 sourcemap 时,会导致生成 sourcemap 冲突。
临时解决方案:
避免在 Vue 的 ts 脚本中使用条件编译,可将条件编译逻辑移到纯 .ts 文件中
关闭 sourcemap 生成(生产环境建议关闭)
官方已在处理此问题,建议关注 uni-app 官方文档 获取最新修复版本。
这个问题是由于条件编译处理阶段和 ts 编译阶段的 sourcemap 生成冲突导致的,建议开发者尽量将条件编译逻辑抽离到单独文件来规避此问题。
内容为 AI 生成,仅供参考