Outline
In this blog post, I will introduce how to execute the commands set in the scripts
of each project when configuring a monorepo using Yarn
’s Workspaces
.
Blog Series
This blog is a series. Please check other blog posts through the following links.
- [Project Management] Repository Strategy
- [JavaScript] Tools for Monorepo
- [Monorepo] Node JS module resolution
- [Monorepo] Symlink
- [Monoepo] Yarn Workspaces
- [Monoepo] Dependency Hoisting of Yarn Workspaces
- [Monoepo] Command of Yarn Workspaces{:target=”_blank”}
- [Monoepo] Creating a Monorepo with PnpM
Example
In order to learn how to execute the commands set in the scripts
of each project in a monorepo configured using Yarn
’s Workspaces
, let’s create an example. First, create the following folder and file structure.
.
├── package.json
└── src
├── module-a
│ ├── index.js
│ └── package.json
└── module-b
├── index.js
└── package.json
The package.json
of module-a
is as follows.
// src/module-a/package.json
{
"name": "module-a",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"start": "node index.js"
}
}
The package.json
of module-b
is as follows.
// src/module-b/package.json
{
"name": "module-b",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"start": "node index.js"
}
}
And the index.js
of module-b
is as follows.
// src/module-b/index.js
console.log('module-b');
The index.js
of module-a
is as follows.
// src/module-a/index.js
console.log('module-a');
require('module-b');
Lastly, modify the package.json
file in the root folder as follows.
{
"name": "monorepo",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"private": true,
"workspaces": {
"packages": ["src/*"]
}
}
Now, run the following command to install the packages and execute the commands set in the scripts
of module-a
and module-b
.
yarn install
cd ./src/module-a
yarn start
cd ../..
cd ./src/module-b
yarn start
Then, you can see that module-a
and module-b
are executed well as follows.
# cd ./src/module-a
# yarn start
module-a
module-b
# cd ./src/module-b
# yarn start
module-b
Workspaces command
In the example above, you can execute the commands set in each project like following.
yarn install
cd ./src/module-a
yarn start
cd ../..
cd ./src/module-b
yarn start
However, it is not efficient to go into the project and execute the command every time.
To solve this problem, Yarn
supports the following Workspaces
command.
yarn workspace <workspace_name> <command>
By using this command, you can execute the command without moving to the project folder. <workspace_name>
is the value set in the name
of package.json
, and <command>
is the command set in the scripts
. You can execute the command in the example above as follows.
yarn workspace module-a start
yarn workspace module-b start
When you run the above command, you can see that the result is displayed well as follows.
# yarn workspace module-a start
module-a
module-b
# yarn workspace module-b start
module-b
Completed
Done! We’ve seen how to execute the commands set in the scripts
of each project in a monorepo configured using Yarn
’s Workspaces
. If you’ve been moving to the project and executing the command every time, try using the Workspaces
command to execute the command more conveniently.
Was my blog helpful? Please leave a comment at the bottom. it will be a great help to me!
App promotion
Deku
.Deku
created the applications with Flutter.If you have interested, please try to download them for free.