npm.io
3.0.6 • Published 5 years agoCLI

monop

Licence
MIT
Version
3.0.6
Deps
3
Size
40 kB
Vulns
0
Weekly
0

monop

build status npm version

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.

Creates symbolic links of all locaDependencies under node_modules in each workspace. This enables each workspace to use others.

$ monop link [options] <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...>

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.

Keywords