Yarn

Yarn is a package manager for JavaScript and TypeScript. It is a alternative to npm

Workspaces

Yarn provide a solution to manage Monorepo - Yarn Workspaces

  • Basically a Monorepo manager
  • in comparison with Lerna.js Yarn Workspaces are low-level

Setup from scratch



1
mkdir yarn-workspaces-sample && cd yarn-workspaces-sample && touch package.json
1
2
3
4
5
6
7
// package.json
{
    "private": true,
    "workspaces": [
        "packages/*"
    ]
}
1
mkdir packages && mkdir packages/server && mkdir packages/utils
1
2
cd packages/utils && yarn init -y
cd ../server && yarn init -y
1
cd ../utils && touch main.js
1
2
3
4
5
6
7
8
// packages/utils/main.js
function greeting(name) {
    console.log(`Hello, ${name}`);
}

module.exports = {
    greeting
};
1
cd ../server && touch main.js
1
2
3
4
5
6
// packages/server/main.js

const { greeting } = require('utils');

greeting('byte');

1
2
3
4
5
6
7
// packages/utils/package.json
{
  "name": "utils",
  "version": "1.0.0",
  "main": "main.js", // index.js ==> main.js
  "license": "MIT"
}
1
2
3
4
5
6
7
// packages/server/package.json
{
  // ...
  "dependencies": {
    "utils": "1.0.0"
  }
}
1
yarn install

yarn install will link dependency utils to server

After installing let’s check that server has workspace dependency utils:

1
yarn workspaces info

should print this:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
{
  "server": {
    "location": "packages/server",
    "workspaceDependencies": [
      "utils"
    ],
    "mismatchedWorkspaceDependencies": []
  },
  "utils": {
    "location": "packages/utils",
    "workspaceDependencies": [],
    "mismatchedWorkspaceDependencies": []
  }
}

Add scripts

1
2
3
4
5
6
7
// packages/server/package.json
{
  // ...
  "scripts": {
    "dev": "node main.js"
  }
}
1
2
3
4
5
6
// /package.json (root)
{
    "scripts": {
        "server:dev": "yarn workspace server dev"
    }
}

Subscribe to the newsletter

Get a once-per-week email with my latest content. By subscribing to this newsletter you will also be the first to receive last updates of my eBooks and courses.

0 members

Comments 💬