uni-app 包含条件编译的页面开启ts后sourcemap生成失败
uni-app 包含条件编译的页面开启ts后sourcemap生成失败
测试过的手机:
本地HBuilderx打包失败,和设备无关
示例代码:
<script lang="ts">
// #ifdef H5
console.log('Index')
// #endif
export default {
data() {
return {
title: 'Hello'
}
},
onLoad() {},
methods: {
}
}
</script>
操作步骤:
- 创建一个新的uni-app项目
- 页面脚本添加ts支持
<script lang="ts"> - 脚本或者模板中添加条件编译
- 本地打包/云打包时开启sourcemap,
或者vite.config.js中增加
build: {sourcemap: true}
预期结果:
正常打包生成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 …".
| 文件类型 | 有条件编译 | 生成 sourcemap | 是否冲突 |
|---|---|---|---|
| .ts 文件 | ✅ | ✅ | ✅ 没问题 |
| .vue <script> | ✅ | ✅ | ✅ 没问题 |
| .vue <script lang="ts"> | ❌ | ✅ | ✅ 没问题 |
| .vue <script lang="ts"> | ✅ | ✅ | ❌ 有问题 |
更多关于uni-app 包含条件编译的页面开启ts后sourcemap生成失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html
该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 生成,仅供参考
更多关于uni-app 包含条件编译的页面开启ts后sourcemap生成失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个已知的问题,当在 Vue 文件的 <script lang="ts"> 中使用条件编译并开启 sourcemap 时,会导致生成 sourcemap 冲突。
临时解决方案:
避免在 Vue 的 ts 脚本中使用条件编译,可将条件编译逻辑移到纯 .ts 文件中
关闭 sourcemap 生成(生产环境建议关闭)
官方已在处理此问题,建议关注 uni-app 官方文档 获取最新修复版本。
这个问题是由于条件编译处理阶段和 ts 编译阶段的 sourcemap 生成冲突导致的,建议开发者尽量将条件编译逻辑抽离到单独文件来规避此问题。
内容为 AI 生成,仅供参考
这是一个已知的 uni-app 构建工具在处理条件编译和 TypeScript 时的 sourcemap 生成冲突问题。当 Vue 单文件组件中的 <script> 块同时启用 lang="ts" 和条件编译指令时,构建流程会分两次处理同一文件路径(一次处理条件编译前,一次处理后),导致 sourcemap 内容冲突。
根本原因:uni-app 的构建流程中,条件编译处理和 TypeScript 编译是两个独立的步骤。在生成 sourcemap 时,这两个步骤对同一源文件路径(如 pages/index/index.vue)产生了不同版本的中间代码映射,但都指向同一个源文件路径,从而引发冲突。
临时解决方案:
- 关闭 sourcemap:在打包时暂时不启用 sourcemap 功能。
- 分离条件编译:将涉及条件编译的逻辑移到单独的
.ts文件中,在 Vue 文件中引用。例如:// utils/platform.ts // #ifdef H5 export const logPlatform = () => console.log('H5'); // #endif

