Rush Stack商店博客活动
跳至主要内容
heft

Heft 是一款基于配置的工具链,它调用其他流行工具,如 TypeScript、ESLint、Jest、Webpack 和 API 提取器。您可以使用它来构建 Web 应用程序、Node.js 服务、命令行工具、库等等。Heft 以相同的方式构建所有 JavaScript 项目:一种行之有效的方式。

Heft 通常由**package.json**命令启动,例如"npm run build""npm run test"。它设计用于在可能包含数百个项目的单一代码库中使用,其中Rush协调器在每个项目文件夹中分别调用这些命令。在这种情况下,所有内容都必须尽可能快地执行。专用脚本变得难以维护,因此最好用由配置文件驱动的可重用引擎来替换它们。在一个大型代码库中,您需要最大程度地减少这些配置文件在项目中的重复。最终,您需要定义一组小的、典型项目类型("rigs")来正式支持,然后阻止项目覆盖 rig 配置。保持一致性可以确保任何人都可以轻松地为任何项目做出贡献。Heft 是所有这些概念的现成实现。

但是,您不需要单一代码库来使用 Heft。它也适用于小型独立项目。与其他类似系统相比,Heft 有一些独特的设计目标。

  • **可扩展性**:Heft 与Rush Stack工具系列接口,这些工具专门针对人员和项目众多的大型单一代码库。不过,Heft 不需要 Rush。

  • **优化**:Heft 在每个步骤中跟踪细粒度的性能指标。TypeScript 插件实现了复杂的优化,例如:文件系统缓存、增量编译、同时多目标发出以及 Jest/Webpack/ESLint 的统一编译过程。JSON 配置文件和插件清单允许快速查询元数据,而无需评估可能效率低下的脚本代码。

  • **完整性**:Rush Stack 致力于为构建典型的 TypeScript 项目提供一个完全完善的解决方案。不受限制的任务抽象通常会阻碍这一目标:优化和支持(以及记录!)所有可能的技术选择组合成本很高。最佳优化和集成会对任务的交互方式做出深刻的假设。虽然 Heft 引擎本身非常灵活,但我们的理念是同意一种覆盖各种场景的标准方法,然后投资于为该方法打造最佳体验。

  • **可扩展性**:大多数项目都需要至少一些专门的任务,例如预处理器、后处理器或加载器。Heft 以插件为中心,使用tapable钩子系统(来自 Webpack 的熟悉系统)。强类型 API 使编写自己的插件变得容易。与 Grunt 或 Gulp 等松散架构相比,Heft 的插件系统以显式易于阅读的配置文件为中心。自定义通常会扩展标准 rig,而不是从头开始。

  • **熟悉性**:与 Rush 一样,Heft 是一个普通的 Node.js 应用程序——开发人员不需要安装 Python、MSYS2 或 .NET Framework 等本机先决条件。Heft 的源代码易于理解和调试,因为它 100% 是 TypeScript,与您的 Web 项目使用的编程语言相同。当然,开发针对本机目标的项目仍然是可能的。

  • **专业性**:Rush Stack 项目由发布大型商业应用程序的工程师开发并用于发布大型商业应用程序。每个特性都经过设计,公开讨论,并经过认真代码审查。重大更改要求我们迁移数千个我们自己的项目,因此升级与典型的 Node.js 工具相比相对轻松。