monop v3.0.6
monop
Monop is a npm-scripts hook for lazy development of dizzying monorepo applications.
Installation
$ npm install -g monopUsage
Monop is CLI tool for monorepo applications like below.
some-project/
├── monop-workspace.json
├── package.json
└── packages
├── pkg-1
│ ├── index.js
│ └── package.json
├── pkg-2
│ ├── index.js
│ └── package.json
└── pkg-3
├── index.js
└── package.jsonThis project has package.jon in the project root, and workspaces under packages/ directory. Each workspace has package.json too.
The project needs monop-workspace.json, Monop configuration file, to be managed by Monop. Monop sees the directory where it is as the project root.
Syntax of monop-workspace.json
Example:
{
"workspaces": ["packages/*/package.json"]
}.workspaces
Set array of glob pattern strings. Monop search workspaces with the patterns. The pattern must be ends with package.json. Monop will ignore node_modules by default.
.commonLocalDependencies
Set array of workspacce package names. They will be common localDependencies.
Monop commands
Monop provides monop command.
monop link
Creates symbolic links of all locaDependencies under node_modules in each workspace. This enables each workspace to use others.
$ monop link [options] <workspace_query>workspace_query: Workspace Query
Example:
$ monop link all
[monop] Create symlinks in @project01/pkg-2
[monop] Symlink: packages/pkg-2 -> packages/pkg-2/node_modules/@project01/pkg-1
[monop] Create symlinks in @project01/pkg-3
[monop] Symlink: packages/pkg-3 -> packages/pkg-3/node_modules/@project01/pkg-2In this case, @project01/pkg-1 depends on @project01/pkg-2, and @project01/pkg-2 depends on @project01/pkg-3.
monop list
Shows all workspaces.
monop exec
Executes a command in workspaces.
$ monop exec [options] <workspace_query> <command...>workspace_query: Workspace Querycommand: command strings
Example:
$ monop exec pkg-3 npm installnpm install will be run in packages/pkg-3. You can run this command in everywhere directory under the project root.
Workspace Query
Workspace query string can be:
- Workspace name (the pachage name
package.json) - Workspace short name (You can see by
monop list) - Workspace directory relative path (For example,
.) - You can spacify all workspaces with
all
You can use the option --chain. The word "chain" means all local dependencies of the workspace searched recursively. With the option --chain, the command run in all "chain" workspaces.
Examples:
# Exec "npm run prepare" in all workspaces
$ monop exec all npm run prepare
# Exec "npm install" in all chain workspaces of pkg-3
$ monop exec --chain pkg-3 npm install
# Exec "npm install" in all chain workspaces of current directory workspace
$ monop exec --chain . npm installAbout "localDependencies"
The command monop exec --chain requires custom field .monop.localDependencies in package.json in each workspace to specify local package dependencies.
Example:
{
"monop": {
"localDependencies": [
"@project01/pkg-2"
]
}
}Example projects
See test/fixtures.