Getting Started
Lerna comes with a dedicated init
command to assist you with both adding lerna to an existing repo, or creating one from scratch.
Starting from scratch
In the simplest case, lerna init
can be used to create a new repository in an empty directory. For that, we can run the following commands:
# Create an empty directory
mkdir ./new-lerna-workspace
# Change into the new directory
cd ./new-lerna-workspace
# Initialize lerna (using --dryRun to preview the changes)
npx lerna init --dryRun
Note that we have passed the --dryRun
flag here, this allows us to see a preview of the changes that lerna init
will make to our file system. This allows us to tweak the values of any other arguments we pass to lerna init
(such as --exact
or --independent
) without having to worry about undoing any mistakes.
Once we are happy with the changes it will make, we can simply repeat the npx lerna init
command but leave off the --dryRun
flag.
You will now be up and running with a working git repository, including npm workspaces, with lerna available to create, version and publish any packages you wish to develop.
Adding lerna to an existing repo
If you already have an existing repo, you can still add lerna
to it using lerna init
.
Lerna is not responsible for installing and linking your dependencies in your repo, your package manager is much better suited to that task.
Instead, we strongly recommend configuring your package manager of choice to use its workspaces
feature:
When initializing lerna on an existing repo, it will need a way to know what packages it should operate on. If you are using your package manager's workspaces
feature (see note above), then lerna will default to using the workspaces
patterns you have already configured. No extra arguments are required.
Alternatively, you can manually specify a set of patterns to match against instead by using the --packages
flag for lerna init
:
# Passing a single pattern
npx lerna init --packages="packages/*"
# Passing multiple patterns
npx lerna init --packages="foo/*" --packages="bar/*"