Rush StackShopBlogEvents
跳到主要内容
版本:0.50.0
heft

Heft 是一个配置驱动的工具链,它用于调用诸如 TypeScript, ESLint, Jest, API Extractor 等流行的工具。你可以使用它来构建 web 应用、Node.js 服务、命令行工具、库等等。Heft 以一种有效、一致的方式来构建你的 JavaScript 项目。

Heft 通常由 package.json 中的 "build" 脚本调用。Heft 被设计用于 Rush 管理的可能有数百个项目的 monorepo 中,在该仓库下 Rush 会单独在每个项目下调用 "build" 脚本。此时,一切都必须尽可能快地执行。带有特殊用途的脚本维护起来很麻烦,因此最好用一个由配置文件驱动、可复用的引擎来替代它们。在大型仓库中的不同项目下,你会希望减少配置文件的重复。最终,你会维护用于重复定义的一小部分项目类型("rigs"),随后不鼓励项目覆盖这些配置。一致性的配置可以保证任何人都可以轻松地参与到任何项目中。Heft 实现了这些概念。

然而,一些小型、独立的 monorepo 中不使用 Heft 也可以良好的工作。与其他类似的系统相比,Heft 具有一些独特的设计目标:

  • 可扩展: Heft 可以与 Rush Stack 内工具进行交互,它们是专门为大型多人项目设计的。尽管 Heft 并不依赖 Rush.

  • 良好优化: Heft 记录了每一步中的性能指标。尽管 Heft 依然处于早期阶段,但是 TypeScript 插件已经实现了诸如文件缓存、增量变异、缓存文件的符号连接来减少拷贝时间,将编译器放到一个单独的进程中,为 Jest 和 Webpack 提供统一的编译流程等优化。

  • 完整的: Rush Stack 希望为 TypeScript 项目创建一个完全可行的解决方案。毫无主见的抽象往往与该目标背道相驰:优化和支持(包括文档)每一个可能的技术栈非常耗时耗力,最好的优化和集成对所有可能的任务进行了许多假设,Heft 是有主见,我们的目标是在工具链上达成一致,这些工具链在大多数场景下可以良好工作,然后深度投入,最终来带良好的体验。

  • 可扩展的: 大多数项目至少需要一些诸如前置处理、后置处理或者加载等任务。Heft 由一系列基于 tapable 的插件组成(与 Webpack 类似),编写自己的插件很容易。不同于 Grunt 或 Gulp 的松散架构,Heft 提供了一个预定义的“阶段”来注册自定义任务,有了这么一个标准化的起点,就可以在自定义 rigs 得到更轻松的技术支持。

  • 熟悉的:与 Rush 类似,Heft 是一个 Node.js 应用 —— 开发者不需要下载任何诸如 Python, MSYS2, 或 .NET 框架等前置。由于是 100% 的 TypeScript 项目,因此 Heft 的源代码很容易理解和调。当然,写成编译形项目也是有可能的。

  • 专业的:Rush Stack 项目是由一群从事商业项目的工程师开发的。每一个功能都经过精心设计、开放讨论、充分审查后实现的。尽管是一个免费的社区协作,但是未来的很多年,我们将以此为依托进行开发。