Bug报告
🔎 搜索词
source map, extension
🕗 版本与回归信息
TypeScript 4.7.2
⏯ Playground链接
不是Playground链接,但重现问题的方法在这里:https://github.com/unional/tersify/tree/webpack
要重现这个问题,运行yarn bundle
并在浏览器中打开demo.html
。
你可以看到source-map-loader
能够获取到unpartial/ts/index.ts
文件,但是无法获取它引用的文件(./required.js
, ./unpartial.js
)。
这是因为这些文件实际上是在TS中的。也就是说,它们是required.ts
和unpartial.ts
。
我不确定这是TypeScript 4.7的bug还是需要更新source-map-loader
来支持这个功能。
但是考虑到在TypeScript 4.7之前以及JS本身的情况下,它应该是可以正常工作的,
所以很可能是由TypeScript 4.7生成的sourcemap需要一些调整。
💻 代码
被引用的代码unpartial
在这里:https://github.com/unional/unpartial
它是用sourceMap: true
构建的,位于tsconfig.json
中。
由于这与代码的构建和消费方式有关,我没有一个最小重现问题的示例。
但是我选择演示的库足够简单,应该足够简单。
🙁 实际行为
无法使用TypeScript库生成的sourcemap进行消耗
🙂 预期行为
应该可以正常工作,就像在这个分支中展示的那样:https://github.com/unional/tersify/tree/webpack-old
5条答案
按热度按时间ippsafx71#
这似乎是TypeScript不为您重写源文件扩展名的另一个意外后果。#49083正在要求改变这种行为。
f2uvfpb92#
@unional ,你提到的上述分支(https://github.com/unional/tersify/tree/webpack)似乎不可用,因为当我尝试访问该链接时,我得到了404错误,所以我对上下文不是100%清楚。
这是一个长期存在的TypeScript行为。我们不会重写你在
import
和export
声明中使用的扩展名,所以如果你的模块引用使用了.js
扩展名,我们会原样发出。我们还不允许具有.ts
扩展名的模块引用,因为那在运行时将不是正确的扩展名。你确定这与TS 4.7有关吗?从我所了解的情况来看,你最近也在两周前将模块引用从不带扩展名的形式更改为包括
.js
扩展名(根据unional/unpartial@c77f694)。yuvru6vn3#
嗨,我已经恢复了分支。
是的,这与TS 4.7有关,而且确实与
.js
扩展有关。在TS 4.7中,为了支持
moduleReolution: NodeNext
,需要将.js
扩展添加到导入路径中,这似乎破坏了源Map。这很可能是由于源Map引用了实际文件路径(
.ts
)而不是输出文件路径(.js
)。xam8gpfp4#
源Map应该引用源文件路径:https://sourcemaps.info/spec.html#h.mofvlxcwqzej。如果存在
"file"
条目(如果有),则引用生成的输出,但"sources"
数组应始终引用原始源文件路径。我不清楚您在这里所说的问题是什么。
source-map-loader
可能不理解 TypeScript 的行为。我不认为这仅限于 4.7,因为我们多年来一直支持附加.js
扩展名的能力,尽管这可能是导致您在项目中切换到使用.js
扩展名的原因。tpgth1q75#
我不清楚你在这里说的哪里出了问题。
请按照上述步骤和描述操作:
总之,TypeScript生成的源Map在某些情况下可以正常工作,而在其他情况下则无法正常工作。
TypeScript将代码编译成JavaScript,并将其与源Map一起分发。
当使用TypeScript编写的包时,源Map应该可以正常工作。编写它时使用的是TypeScript这一点应该不重要。