nodejs 19 删掉了 --es-module-specifier-resolution=node ,也就是 nodejs 19+(包括最新的 20 LTS)没有简单的办法直接使用无后缀名的 import 语句。而绝大部分的 typescript 源码里都是不包含后缀名的。当然,你可以用自定义 loader 来解决,但在我看来这是强行给开发者制造负担。有人也许认为这是 TS 的锅(tsc为啥不在编译结果里加上 `.js` 后缀?),或者至少 TS 团队要付一定的责任。但在我看来,这个锅绝对是 node 团队的,甩不到 TS 团队头上 —— 我认为 TS 团队坚持只擦除类型而拒绝修改任何其他源码(除了为确保兼容性的历史遗留)才是合理的技术决策。

怎么说呢,在这种开发者体验问题上,node 核心团队一向冥顽不灵。当年就拒不支持 promise 化的 API。然后也一直拖到很晚才实现 Web 兼容API(比如 URL、TextEncoder/Decorder等)。Deno、Bun 都拥抱 TS 了,nodejs 反过来还在给 TS 开发者拖后腿。

#1024一起掘金#
展开
评论