ts-loader vs babel-loader 在 Typescript 中使用 webpack

Posted

技术标签:

【中文标题】ts-loader vs babel-loader 在 Typescript 中使用 webpack【英文标题】:ts-loader vs babel-loader in Typescript using webpack 【发布时间】:2021-05-05 14:15:54 【问题描述】:

所以我试图比较这两种组合的输出编译代码。

ts-loader

  
    test: /\.tsx?$/,
    use: 'ts-loader',
  

babel-loader

  use: 
      loader: 'babel-loader',
      options: 
        presets:
          [
            "@babel/preset-react",
            "@babel/preset-typescript",
          ]
      
    
babel-loader 的编译时间低于 ts-loader。 另外,ts-loader looks to be using babel under the hood,至少它在它的依赖项中。 另外,babel-loader 允许通过 cacheDirectory 使用缓存

问题

    有没有办法像 babel 中的 cacheDirectory 一样在 ts-loader 中使用缓存? 使用 ts-loader 代替 babel-loader 有什么其他好处吗?

【问题讨论】:

我要开始赏金了,因为我对这个话题很感兴趣,看到点赞,我想还有更多人感兴趣。 你读过这篇文章吗? kevinwil.de/… 对于您的第一个问题,ts-loader 有一个config option,但它的名称似乎具有实验性,所以我不会依赖它。对于您的第二个问题,我没有使用 ts-loader 仅仅是因为 babel-loader 在一个包中提供了所有内容以及更多内容。即使我使用了 ts-loader,我仍然需要 babel 来进行其他转换。 This would help 【参考方案1】:

对于您的问题:

    正如有人已经提到的,在 ts-loader 中有一个实验性设置允许缓存,您可以查看配置参考以获取更多信息:https://github.com/TypeStrong/ts-loader#experimentalfilecaching Afaik babel 自身不进行类型检查,因此您必须为此运行 TSC。它也不支持 ts 的 'const enum' 语法...

您也可以混合使用 2,将 ts-loader 用于开发,将 babel 用于产品构建。

【讨论】:

以上是关于ts-loader vs babel-loader 在 Typescript 中使用 webpack的主要内容,如果未能解决你的问题,请参考以下文章

类型中缺少属性“孩子”

webpack + typescript + babel打包*.min.js文件的环境配置

与 Webpack 捆绑的 Node 或 Electron 主进程的 VSCode 调试

如何为 ts-loader 指定 typescript 版本?

带有 ts-loader 的 webpack 线程加载器

如何使用 webpack-chain 将 appendTsSuffixTo 选项添加到 ts-loader?