A npm-scripts hook for lazy development of dizzying monorepo applications.
Last updated 5 months ago by fuji_haruka .
MIT · Repository · Bugs · Original npm · Tarball · package.json
$ cnpm install monop 
SYNC missed versions from official npm registry.


build status npm version

Monop is a npm-scripts hook for lazy development of dizzying monorepo applications.


$ npm install -g monop


Monop is CLI tool for monorepo applications like below.

├── 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


  "workspaces": ["packages/*/package.json"]


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.


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>


$ 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...>


$ 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.


# 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.


  "monop": {
    "localDependencies": [

Example projects

See test/fixtures.

Current Tags

  • 3.0.1                                ...           latest (5 months ago)

7 Versions

  • 3.0.1                                ...           5 months ago
  • 3.0.0                                ...           5 months ago
  • 2.1.0                                ...           5 months ago
  • 2.0.0                                ...           5 months ago
  • 1.0.1                                ...           5 months ago
  • 0.1.1                                ...           5 months ago
  • 0.1.0                                ...           5 months ago
Maintainers (1)
Today 0
This Week 0
This Month 0
Last Day 0
Last Week 0
Last Month 0
Dependencies (5)
Dev Dependencies (16)
Dependents (0)

Copyright 2014 - 2016 © |