Task runner in JS monorepos
Перейти к файлу
Veniamin Krol 99429a1dcb
Fix typo in monorepo.md (#199)
2022-03-02 20:25:18 -08:00
.github/workflows update comments in bot 2022-01-27 15:35:51 -08:00
.vscode adding a flag to turn off local cache population (#211) 2022-01-28 16:06:34 -08:00
bin Add types so the lage.config.js can be typed! (#148) 2021-06-11 15:58:47 -07:00
decks Fix typo in monorepo.md (#199) 2022-03-02 20:25:18 -08:00
docs (docs): minor fix in pipeline explanation - levels.md#pipelining (#197) 2022-03-02 20:23:46 -08:00
docs-new Bump prismjs from 1.25.0 to 1.27.0 in /docs-new (#227) 2022-03-02 20:19:26 -08:00
scripts New docs! Fixing some types to make documentation better! (#51) 2020-07-24 12:33:34 -07:00
src adding a flag to turn off local cache population (#211) 2022-01-28 16:06:34 -08:00
tests adding a flag to turn off local cache population (#211) 2022-01-28 16:06:34 -08:00
.gitignore [ADO Reporter] Add ADO logging (#168) 2021-09-23 10:30:36 -07:00
.npmignore Add types so the lage.config.js can be typed! (#148) 2021-06-11 15:58:47 -07:00
CHANGELOG.json applying package updates 2022-01-29 00:08:10 +00:00
CHANGELOG.md applying package updates 2022-01-29 00:08:10 +00:00
CODE_OF_CONDUCT.md Initial CODE_OF_CONDUCT.md commit 2020-05-18 13:11:24 -07:00
LICENSE Initial LICENSE commit 2020-05-18 13:11:25 -07:00
README.md Update README.md 2020-05-18 16:20:56 -07:00
SECURITY.md Initial SECURITY.md commit 2020-05-18 13:11:27 -07:00
beachball.config.js Add beachball config to unblock dependabot PRs (#185) 2021-12-02 13:34:46 -08:00
jasmine.json End to end tests for running basics (#52) 2020-08-05 12:14:45 -07:00
jest.config.js Fixing failure mode when targets fail, we need to fail the build! (#165) 2021-09-14 13:23:01 -07:00
package.json applying package updates 2022-01-29 00:08:10 +00:00
renovate.json Enable Renovate (#78) 2020-10-07 17:12:32 -07:00
test.md New docs! Fixing some types to make documentation better! (#51) 2020-07-24 12:33:34 -07:00
tsconfig.json adding a flag to turn off local cache population (#211) 2022-01-28 16:06:34 -08:00
yarn.lock Bump shelljs from 0.8.4 to 0.8.5 (#205) 2022-03-03 04:25:09 +00:00

README.md

lage

Documentation is here: https://microsoft.github.io/lage/

Overview

Your JS repo has gotten large enough that you have turned to using a tool to help you manage multiple packages inside a repository. That's great! However, you realized quickly that the tasks defined inside the workspace have to be run in package dependency order.

Lerna, Rush, wsrun and even pnpm will provide a simple way for you to run npm scripts to be run in a topological order. However, these tools will force you to run your tasks by script name one at a time. For example, all the build scripts will have to run first. Then all the test scripts run in the topological order.

This usually means that there are wasted CPU cycles in between build and test. We can achieve better pipelining the npm scripts if we had a way to say that test can run as soon as build are done for the package.

lage (Norwegian for "make", pronounced law-geh) solves this by providing a terse pipelining syntax. It has many features geared towards speeding up the task runner that we'll explore later.

Quick Start

lage gives you this capability with very little configuration. First, let's install the lage utility. You can place this in your workspace's root package.json by running yarn add:

yarn add -D lage

Confirm with yarn that you are sure to add a package at the root level, you then place a root level script inside the package.json to run lage:

{
  "scripts": {
    "build": "lage build",
    "test": "lage test"
  }
}

Add a configuration file in the root to get started. Create this file at the root lage.config.js:

module.exports = {
  pipeline: {
    build: ["^build"],
    test: ["build"],
  },
};

Do not worry about the syntax for now. We will go over the configuration file in a coming section. You can now run this command:

$ lage test

lage will detect that you need to run build steps before tests are run.

Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.

When you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.