Run tasks/scripts across Yarn/Lerna/Bolt/etc workspaces.
npm install workspaces-runworkspaces-run> Run tasks/scripts across Yarn/Lerna/Bolt/etc workspaces.
``sh`
npm install workspaces-run
Run a command across every workspace:
`sh`
$ workspaces-run -- echo "hello world"
@project/workspace-one | hello-world
@project/workspace-two | hello-world
@project/workspace-three | hello-world
`sh`
$ workspaces-run --parallel -- script.sh
@project/workspace-one | working...
@project/workspace-two | working...
@project/workspace-three | working...
@project/workspace-one | done.
@project/workspace-two | done.
@project/workspace-three | done.
#### --parallel=physical-cores
`sh`On a machine with 2 physical cores
$ workspaces-run --parallel=physical-cores -- script.sh
@project/workspace-one | working...
@project/workspace-two | working...
@project/workspace-one | done.
@project/workspace-three | working...
@project/workspace-two | done.
@project/workspace-three | done.
#### --parallel=
`sh`
$ workspaces-run --parallel=2 -- script.sh
@project/workspace-one | working...
@project/workspace-two | working...
@project/workspace-one | done.
@project/workspace-three | working...
@project/workspace-two | done.
@project/workspace-three | done.
`sh`When "one" and "two" depend on "three"
$ workspaces-run --order-by-deps -- script.sh
@project/workspace-three | working...
@project/workspace-three | done.
@project/workspace-one | working...
@project/workspace-one | done.
@project/workspace-two | working...
@project/workspace-two | done.
#### --order-by-deps=
`sh`When "three" is in "devDependencies" of "one" but in "peerDependencies" of "two"
$ workspaces-run --order-by-deps=devDependencies -- script.sh
@project/workspace-two | working...
@project/workspace-two | done.
@project/workspace-three | working...
@project/workspace-three | done.
@project/workspace-one | working...
@project/workspace-one | done.
`sh`
$ workspaces-run --continue-on-error -- script.sh
@project/workspace-one | working...
@project/workspace-one | Error!
@project/workspace-two | working...
@project/workspace-two | Error!
@project/workspace-three | working...
@project/workspace-three | done.
`sh`
$ workspaces-run --no-prefix -- script.sh
working...
done.
working...
done.
working...
done.
The task will be run on a workspace if _all_ of the conditions are true.
- When _any_ of the --only patterns match the workspace package.json#name; _and_--only-fs
- When _any_ of the patterns match the workspace directory; _and_--ignore
- When _all_ of the patterns do _not_ match the workspace package.json#name; _and_--ignore-fs
- When _all_ of the patterns do _not_ match the workspace directory.
Patterns support any syntax available in micromatch:
`sh`
workspaces-run --only-fs="/path/to/dir/"
workspaces-run --only="workspace-{one,two}"
Flags can be specified multiple times:
`sh`
workspaces-run --only=
The flags --only-fs and --ignore-fs match against a relative path to the
current working directory.
`js
import workspacesRun from "workspaces-run"
await workspacesRun({ cwd }, async (workspace, allWorkspaces) => {
await doSomething(workspace)
})
`
`js
let cwd = process.cwd()
await workspacesRun({ cwd }, ...)
`
`js`
await workspacesRun({ cwd, parallel: true }, ...)
await workspacesRun({ cwd, parallel: "physical-cores" }, ...)
await workspacesRun({ cwd, parallel: 3 }, ...)
`js`
await workspacesRun({ cwd, orderByDeps: true }, ...)
await workspacesRun({ cwd, orderByDeps: ["devDependencies"] }, ...)
`js`
await workspacesRun({ cwd, continueOnError: true }, ...)
The task will be run on a workspace if _all_ of the conditions are true.
- When _any_ of the only patterns match the workspace package.json#name; _and_onlyFs
- When _any_ of the patterns match the workspace directory; _and_ignore
- When _all_ of the patterns do _not_ match the workspace package.json#name; _and_ignoreFs
- When _all_ of the patterns do _not_ match the workspace directory.
Patterns support any syntax available in micromatch:
`js`
await workspacesRun({
cwd,
only: ["workspace-{one,two}"],
onlyFs: ["/path/to/dir/"],
}, ...)
The options onlyFs and ignoreFs match against a relative path to the cwd`.