This commit is contained in:
Pete Gonzalez 2020-07-15 11:07:48 -07:00
Родитель 371aa395b1
Коммит 594e87c69f
3 изменённых файлов: 55 добавлений и 0 удалений

Просмотреть файл

@ -23,6 +23,11 @@ docs_nav:
- title: Project roadmap
url: /pages/overview/roadmap
- title: Heft
subitems:
- title: Overview
url: /pages/heft/overview
- title: Contributing
subitems:
- title: Getting Started

Двоичные данные
images/heft-300x120.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 10 KiB

50
pages/heft/overview.md Normal file
Просмотреть файл

@ -0,0 +1,50 @@
---
layout: page
title:
navigation_source: docs_nav
---
<img src="{{ site.baseurl }}/images/heft-300x120.png" alt="heft" title="heft" style="width: 300px;"/>
🚨 *The Heft project is still in early preview. Please report any issues you encounter.* 🚨
Heft is an extensible build system designed for use with the [Rush Stack](https://rushstack.io/) family of tools.
You don't need a monorepo to use Heft, though. It also works well for small standalone projects. Compared to
other similar systems, Heft has some unique design goals:
- **Scalable**: Heft is designed to interface with the [Rush](https://rushjs.io) build orchestrator which is
optimized for large monorepos with many people and projects. (Usage of Rush is optional.)
- **Familiar**: Heft is a plain Node.js application, so developers won't need to install any native prerequisites
such as Python, MSYS2, or the .NET Framework. Heft's source code is easy to understand and debug because everything
is 100% TypeScript, the same programming language as your web projects. Developing for native targets is also
supported, of course.
- **Polished and Complete**: Philosophically, Rush Stack aspires to provide a functionally complete toolkit with
a professional developer experience. Pluggable task abstractions actually work against this goal:
It's expensive to support and optimize (and document!) every possible combination of pieces. Also, the best
optimizations rely heavily on assumptions about what's behind the abstraction. (As one example, sharing
compiler state with the linter requires fairly different strategies for ESLint versus TSLint.) Heft is customizable,
but our focus is to invest deeply in one recommended approach that everyone can use.
- **Extensible**: Most large projects require specialized additional tooling such as preprocessors, postprocessors,
instrumentation, and reporting. Heft allows you to write your own plugins using the
[tapable](https://www.npmjs.com/package/tapable) hook system (familiar from Webpack). Compared to loose
architectures such as Grunt or Gulp, Heft ships a standardized set of stages for custom tasks to hook into.
Working from a more standardized foundation makes custom rigs more understandable for newcomers.
- **Optimized**: Heft tracks fine-grained performance metrics at each step. Although Heft is still in its
early stages, it already implements optimizations such as: incremental compilation, symlinking of cache files
to avoid copying, reuse of compiler state across multiple emit targets, and a single compiler pass for
Jest and Webpack.
## How do I use it?
Heft is still under active development; more documentation will be coming soon. In the meantime, here are
a couple test projects that illustrate Heft setups:
- [heft-test-01](https://github.com/microsoft/rushstack/tree/master/build-tests/heft-test-01): A basic Node.js
application with Jest and API Extractor
- [heft-test-webpack](https://github.com/microsoft/rushstack/tree/master/build-tests/heft-test-webpack): A basic
web application bundled using Webpack