使用TypeScript的捆绑器

时间:2019-05-20 17:40:11

标签: typescript typescript-compiler-api

TypeScript API在几个版本之前公开了customTransformer API。

我想创建一个处理导入语句(可能也需要)的转换器,以解决包依赖关系,例如 webpack browserify parcel 做。

幸运的是,TypeScript本身已经将customTransformer API用于非常相似的目的:

transformAMDModule at src/compiler/transformers/module/module.ts line 120

但是,该代码依赖于许多内部字段/ API(并且并没有完全执行此处所需的操作)。

可以在公共API中完成此任务吗?即使是简化/部分版本。


要澄清:这是关于将应用程序的外部依赖项(例如reactmomentlodash)与应用程序代码本身捆绑在一起。尽管TypeScript当前支持--outFile参数,但这仅将应用程序代码组装在一起,而没有依赖关系。

P.S。通过Twitter/486timetable提出相同的问题,并将在此处反映出所有有用的更新,以提高可搜索性。

1 个答案:

答案 0 :(得分:0)

没有正式答案,但这是GitHub上的my own exploration

  1. 您不能仅使用自定义转换器来实现它。在发射/转换阶段之前,需要先做很多工作。
  2. 第一阶段是收集模块依赖性。这就是findDependencies在这里所做的:获取ts.Programts.TypeChecker对象,并从AST中嗅出模式。理想情况下,它需要抓住:
    • import ... from "a-module"语句
    • require("a-module")同步通话
    • import("a-module")异步调用
    • AMD define语法
    • AMD require异步调用(行为与全局同步require不同)
    • 也许-重定向选择的全局变量,例如React-> import React from "react"
    • 旧语法的TypeScript import语句
  3. 外部依赖项-捆绑(递归)。
  4. 最后,开始发射和处理/别名依赖项:
    • 如果在代码内部,只需本地解析
    • 注入外部预捆绑的

并非完全简单,但实际上可行。希望#TypeScript小组的人可以纠正任何错误?