今天突然奇想:如果为了快速启动一个项目,源码是ts的情况下,那我该是选择用tsc还是babel来进行编译呢?
然后查到一篇让人比较容易理解的文章,大家可以参考: 编译TS 代码用TSC 还是Babel?
对比
| 功能点 | tsc | babel |
|---|---|---|
| 源码转换成 AST 的 Parser | ✅ | ✅ |
| 语义分析(作用域分析) | ✅ | ✅ |
| 类型检查 | ✅ | ❌ |
| AST 的 transform | ✅ | ✅ |
| 使用 Generator(或者 Emitter)生成目标代码和sourcemap | ✅ | ✅ |
| 过时的 export = import = 的模块语法 | ❌ | ❌ |
| const enum | ✅ | ❌ (会作为 enum 处理) |
| namespace 的跨文件合并 | ❌ | ✅ |
| 导出非 const 的值 | ✅ | ❌ |
| 支持更多的语言特性 | ❌(支持最新的es标准特性和部分草案特性) | ✅ |
| 没有做 polyfill 的处理 | ❌需要全量引入 core-js | ✅ |
总结
-
babel 编译 ts 代码来生成体积更小的代码,不做类型检查编译速度也更快。
-
如果想做类型检查可以单独执行 tsc --noEmit。
-
本文只做对比,没有也不会给出用什么最好,具体用什么编译 ts,大家可以根据场景自己选择。