typescript - 使用 TypeScript 的捆绑器
问题描述
TypeScript APIcustomTransformer
在几个版本之前公开了 API。
我想创建一个转换器来处理 import 语句(可能也需要)来解决包依赖关系,比如webpack、browserify或parcel。
幸运的是,TypeScript 本身已经将 customTransformer API 用于非常相似的目的:
transformAMDModule在 src/compiler/transformers/module/module.ts 第 120 行
但是,该代码依赖于许多内部字段/API(并没有完全满足这里的需要)。
这个任务可以在公共 API 中完成吗?即使是简化/部分版本。
澄清一下:这是关于将应用程序的外部依赖项(例如react
、moment
、lodash
)和应用程序代码捆绑到一大块 JS 中。尽管TypeScript
目前支持--outFile
参数,但它仅将应用程序代码组装在一起,而不是依赖项。
PS 通过Twitter/ 486timetable提出相同的问题,并将在此处反映任何有用的更新以供搜索。
解决方案
没有官方答案,但这是我自己在 GitHub 上的探索:
- 您不能仅使用自定义转换器来实现它。需要在发射/转换阶段之前做很多工作。
- 第一阶段是收集模块依赖关系。这就是findDependencies在这里所做的:从 AST 中获取
ts.Program
和ts.TypeChecker
对象并嗅出模式。理想情况下,它需要捕获:import ... from "a-module"
陈述require("a-module")
同步通话import("a-module")
异步调用- AMD
define
语法 - AMD
require
异步调用(行为不同于全局同步require
) - 也许 - 重定向选择加入的全局变量,如
React
-->import React from "react"
- 旧语法 TypeScript
import
语句
- 外部依赖——捆绑(递归)。
- 最后,启动发射和处理/别名依赖项:
- 如果在代码内部,只需在本地解析
- 注入外部预捆绑的
不完全简单,但实际上是可行的。希望#TypeScript 团队的人能纠正任何错误?
推荐阅读
- wordpress - 如果查询没有帖子,如何隐藏文本?
- google-cloud-platform - 如何使用 Google NLP 在单个注释中提取多个标签文本项
- java - org.hibernate.exception.GenericJDBCException:虽然能够从 sql 获取结果,但无法执行查询
- visual-studio-code - 编码时更改样式代码功能VScode时间优化
- python - 根据条件修改具有来自另一个数据帧的单个值的大型 pyspark 数据帧的最佳实践
- javascript - 使用 jQuery 在 WooCommerce 上增加/减少数量
- outlook - 共享收件箱中的 Outlook 加载项 REST API 失败:ErrorInvalidMailboxItemId - 项目 ID 不属于当前邮箱
- java - 如何在 JDI(Java 调试接口)中放置非阻塞断点?
- azure-cosmosdb - Gremlin 查询 cosmosDB 以查找连接
- javascript - 用户如何用按钮打破 JS 循环