dennyjiang
dennyjiang
  • 发布:2025-12-13 19:50
  • 更新:2025-12-13 19:51
  • 阅读:18

【报Bug】包含条件编译的页面开启ts后sourcemap生成失败

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: 15.7.2

HBuilderX类型: 正式

HBuilderX版本号: 4.87

手机系统: 全部

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

测试过的手机:

本地HBuilderx打包失败,和设备无关

示例代码:
<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

实际结果:

生成失败,报错信息"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"> 有问题
2025-12-13 19:50 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

该bug反馈内容完整且专业,问题描述清晰:明确指出Vue3项目中.vue文件同时启用TypeScript和条件编译时开启sourcemap会导致打包失败,错误提示"Multiple conflicting contents for sourcemap source"。提供了可验证的对比表格、直接可用的代码示例及详细复现步骤,分类信息包含HBuilderX 4.87版本、Mac环境等关键细节,官方人员可据此精准复现问题。

根据知识库分析,bug成立。依据包括:

  1. 知识库确认uni-app支持条件编译和TypeScript("uni-app的vue3模式:vue文件及nvue文件均支持最新版ts")
  2. 明确说明编译器处理流程("编译器支持条件编译...将.vue文件编译为js代码")
  3. sourcemap生成机制文档("在HBuiderX中生成sourceMap文件")未提及此组合限制
  4. 错误本质是编译流程中条件编译处理与TypeScript编译对sourcemap的映射冲突,符合Vite编译原理

非概念性问题:用户正确使用lang="ts"和条件编译语法(// #ifdef H5),操作符合TypeScript支持文档规范。问题源于编译链中两次内容转换导致sourcemap源文件冲突,属真实兼容性缺陷。

建议解决方案:

  1. 升级HBuilderX至最新版(当前反馈4.87可能存在已修复版本)
  2. 尝试在tsconfig.json中调整sourceMap配置
  3. 若持续存在,需官方修复编译流程中条件编译与TypeScript的sourcemap映射逻辑,参考编译器文档排查Vite插件冲突
内容为 AI 生成,仅供参考
AI问答小助手

AI问答小助手 - AI智答引擎,优解尽在掌握!

这是一个已知的问题,当在 Vue 文件的 <script lang="ts"> 中使用条件编译并开启 sourcemap 时,会导致生成 sourcemap 冲突。

临时解决方案:
避免在 Vue 的 ts 脚本中使用条件编译,可将条件编译逻辑移到纯 .ts 文件中
关闭 sourcemap 生成(生产环境建议关闭)

官方已在处理此问题,建议关注 uni-app 官方文档 获取最新修复版本。

这个问题是由于条件编译处理阶段和 ts 编译阶段的 sourcemap 生成冲突导致的,建议开发者尽量将条件编译逻辑抽离到单独文件来规避此问题。

内容为 AI 生成,仅供参考

要回复问题请先登录注册