闭包编译器+打字稿

时间:2017-07-11 23:52:19

标签: typescript google-closure-compiler es6-modules tsickle

我想使用Typescript然后使用Closure Compile(高级编译)来定位ES5并缩小输出。

我是否必须使用tsickle代替tsc?它缺乏对tsc所有选项的支持,并且雄心勃勃,因为它想要将Typescript类型转换为Closure类型(它们不是100%兼容)。我真的不需要使用Closure类型;我只需要缩小/属性重命名。

我可以使用tsc将Typescript编译为ES6模块并使用Closure Compiler来缩小这些(没有类型检查或基于类型的优化)吗?

奖励:如果我想使用Closure Library,这个答案会改变吗?

2 个答案:

答案 0 :(得分:8)

从技术上讲,您可以从tsc获取ES6输出并立即将其传递给Closure Compiler,因为后者被指定接受JS作为输入。我们已经在许多地方这样做了,例如。使用闭包编译器编译的Angular应用程序采用rxjs库分发并将其包含在闭包中。见https://github.com/angular/closure-demo

在实践中,我们发现在Closure看到它之前使用像tsickle这样的东西来改造JS的一些原因。

  • enums emit在Closure(或汇总IIUC)中不起作用
  • Closure对ES6有一些限制,例如它目前不支持export * - tsickle将其重写为export {each, visible, symbol}
  • 添加JSDoc注释有助于闭包理解代码的结构,这可以改善优化并减少它打印的警告数量。

我们目前的计划是将tsickle分解为多个TS 2.3发射变换,然后我们可以更清楚地知道哪些变换实际上需要在编译器中启用。

添加类型是可选的。如果您关闭tsickle的键入模式,我们只需打印{?}代替类型。但是,如果你想从闭包JS代码中使用TypeScript的输出,那么你需要闭包类型检查器来知道类型。

如果你是一个新的构建工具的游戏,我们将在某些时候在https://github.com/bazelbuild/rules_typescript中建立tszel到Bazel工具链。在此期间,您可以为Tsickle的main提交功能请求,以支持更多的命令行标志。 (但我认为Lucidchart已经维持了Tsickle的分支?)

答案 1 :(得分:2)

我知道我参加聚会很晚,但是关于Closure库: 现在有一个active fork版的Closure库具有最新版本

  • 打字稿定义(.d.ts)文件
  • 在内部使用ES6代码而不是自定义goog.require和goog.define(因此与Closure编译器无关)