1. const HtmlWebpackPlugin = require('html-webpack-plugin')
  2. const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin')
  3. module.exports = {
  4. entry: './src/index.ts',
  5. output: {
  6. filename: 'app.js'
  7. },
  8. resolve: {
  9. extensions: ['.js', '.ts', '.tsx'],
  10. },
  11. module: {
  12. rules: [
  13. {
  14. test: /\.tsx?$/i,
  15. use: [{
  16. loader: 'ts-loader',
  17. options: {
  18. // 配置项开启,编译器只做语言转换,而不做类型检查
  19. transpileOnly: true
  20. }
  21. }],
  22. exclude: /node-modules/
  23. }
  24. ]
  25. },
  26. plugins: [
  27. new HtmlWebpackPlugin({
  28. template: './src/tpl/index.html'
  29. }),
  30. new ForkTsCheckerWebpackPlugin()
  31. ]
  32. }

transpileOnly: 关闭,即做语言转换,又做类型检查,影响项目构建速度;开启,只做语言转换,不做类型检查,可以加快项目构建速度,但是即使ide报类型错误,也可以构建项目,当开启时可以搭配插件fork-ts-checker-webpack-plugin来进行构建项目的类型检查

awesome-typescript-loader

与ts-loader的主要区别:

  • 更适合与Babel集成,使用Babel的转义和缓存
  • 不需要安装额外的插件,就可以把类型检查放在独立进程中进行
    编译时间对比(ms):
    十四、编译工具:从ts-loader到Bable - 图1

十四、编译工具:从ts-loader到Bable - 图2

十四、编译工具:从ts-loader到Bable - 图3

Babel暂不支持以下四种语法:

  1. // babel 不能使用下面四种语法
  2. <!--命名空间-->
  3. // namespace N {
  4. // export const n = 1
  5. // }
  6. <!--类型断言-->
  7. // let s = {} as A
  8. // s.a = 1
  9. <!--枚举常量-->
  10. // const enum E { A }
  11. <!--导出-->
  12. // export = s

如何选择TypeScript编译工具

十四、编译工具:从ts-loader到Bable - 图4