About
Splitting up large codebases into separate independently versioned packages is extremely useful for code sharing. However, making changes across many repositories is messy and difficult to track, and testing across repositories gets complicated really fast.
To solve these (and many other) problems, some projects will organize their codebases into multi-package repositories. Projects like Babel, React, Angular, Ember, Meteor, Jest, and many others develop all of their packages within a single repository.
Lerna is a tool that optimizes the workflow around managing multi-package repositories with git and npm.
Getting Started
Let's start by installing Lerna globally with npm:
Lerna 2.x is the recommended version to start with (currently in beta).
npm install --global lerna@^2.0.0-beta
Next we'll create a new git repository:
git init lerna-repo && cd lerna-repo
And now let's turn it into a Lerna repo:
lerna init
Your repository should now look like this:
lerna-repo/ packages/ package.json lerna.json
Commands
Here is a brief introduction for each commands. Please visit theREADME for more detailed informations.
lerna init
Create a new lerna repo or upgrade an existing repo to the current version of Lerna.
Options
--independent/-i – Use independent versioning mode.
lerna bootstrap
Bootstrap the packages in the current Lerna repo. Installing all their dependencies and linking any cross-dependencies.
This command is crucial, as it allows you to use your package names in require() as if the packages were already existing and available in your node_modules folder.
lerna publish
Create a new release of the packages that have been updated. Prompts for a new version and updates all the packages on git and npm.
Options
--npm-tag [tagname] — Publish to npm with the given npm dist-tag (Defaults to latest).
--canary/-c – Create a canary release.
--skip-git – Don't run any git commands.
--force-publish [packages] — Force publish for the specified packages (comma-separated) or all packages using * (skips the git diff check for changed packages).
lerna updated
Check which packages have changed since the last release.
lerna diff [package?]
Diff all packages or a single package since the last release.
lerna run [script]
Run an npm script in each package that contains that script.
lerna ls
List all of the public packages in the current Lerna repo.