monop
v3.0.6
Published
A npm-scripts hook for lazy development of dizzying monorepo applications.
Downloads
2
Readme
monop
Monop is a npm-scripts hook for lazy development of dizzying monorepo applications.
Installation
$ npm install -g monop
Usage
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.json
This 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-2
In 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 install
npm 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 install
About "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.