是否有JS工具可合并两个sourcemap实现a.ts到c.js的直接映射?
两个source map级联合并的可用JS工具
有的,目前有成熟的工具库可以直接完成多步编译场景下的source map合并,生成从最初源码到最终产物的直接映射:
- @ampproject/remapping
这是目前使用最广泛的专门用于source map级联合并的库,针对多步编译场景做了性能优化,使用方式非常简单:
const remapping = require('@ampproject/remapping'); // 参数1按顺序传入从后到前的source map:先传最终产物c.js对应的sourcemap2,再传中间产物b.js对应的sourcemap1 const mergedSourceMap = remapping( [sourcemap2, sourcemap1], () => null // 无其他依赖source map时传入该回调即可 ); // 输出的mergedSourceMap就是a.ts直接映射到c.js的完整source map,可直接调用toJSON()序列化使用
- Mozilla官方source-map库
如果需要自定义合并逻辑,可以使用source-map生态的基础库source-map,通过SourceMapConsumer读取两层映射、手动拼接映射关系后用SourceMapGenerator生成最终的合并map,适合需要做定制化处理的场景。
如果是使用Rollup、Webpack、Vite等构建工具的常规项目,不需要手动调用上述库,只要开启构建配置中的sourcemap选项,工具会自动处理多步编译的source map级联合并。
映射关系对应逻辑如下图:
内容的提问来源于stack exchange,提问作者Bojan Vukasovic
相关产品推荐
相关产品推荐

