Lerna
Setup the project with one command
When I first had a look at Lerna, I couldn't understand how it works and what was its value. Essentially, what would have been a repository is now a folder in packages. All the dependencies will be installed with lerna bootstrap.
What does this mean? When you clone the monorepo, you will get all the code required to run the app. When you run yarn install you'll install all the dependencies.
Setting up Lerna
Create lerna.json
{
  "packages": ["packages/**"],
  "version": "independent",
  "npmClient": "yarn"
}Install Lerna at the root of the project.
$ yarn add lernaLet's try
Go to the packages/api and install express
$ cd packages/api
$ yarn add expressThe express dependency should have been added to packages/api/package.json
  "dependencies": {
    "express": "^4.17.1"
  }Let's do the same for packages/web and add react
$ cd packages/web
$ yarn add reactWe should now have node_modules folders in api and web.
$ ls packages/api/node_modules # You should see express
$ ls packages/web/node_modules # You should see reactLet's try to delete both node_modules folders and bootstrap from the project's root directory. It should install all dependencies.
$ lerna bootstrapPost install
We can add anything in scripts of our package.json and run it with yarn name-of-script.
Let's try this first with our package.json from the root directory, :
"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "name-of-script": "echo my script"
},$ yarn name-of-script
yarn run v1.15.2
$ echo my script
my script
β¨  Done in 0.06s.There are pre-defined keywords for npm-scripts. You can find all of them here but we are interested in postinstall.
postinstall: Run AFTER the package is installedWe can add our bootstrap step here:
"scripts": {
    "postinstall": "lerna bootstrap"
},We can now install all the dependencies from the root directory:
$ yarn
[1/4] π  Resolving packages...
$ lerna bootstrap
lerna notice cli v3.16.4
lerna info versioning independent
lerna info Bootstrapping 2 packages
lerna info Installing external dependencies
lerna info Symlinking packages and binaries
lerna success Bootstrapped 2 packages
β¨  Done in 1.75s.Final files and folders structure
.
βββ lerna.json
βββ node_modules
βββ package.json
βββ packages
βΒ Β  βββ api
βΒ Β  βΒ Β  βββ package.json
βΒ Β  βΒ Β  βββ node_modules
βΒ Β  βΒ Β  βββ yarn.lock
βΒ Β  βββ web
βΒ Β      βββ package.json
βΒ Β   Β Β  βββ node_modules
βΒ Β      βββ yarn.lock
βββ yarn.lockLast updated
Was this helpful?