workspaces-run
Run tasks/scripts across Yarn/Lerna/Bolt/etc workspaces.
npm install workspaces-run
Run a command across every workspace:
$ workspaces-run -- echo "hello world"
@project/workspace-one | hello-world
@project/workspace-two | hello-world
@project/workspace-three | hello-world
--parallel
$ 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
# 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=<number>
$ 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.
--order-by-deps
# 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=<dependencyType>
# 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.
--continue-on-error
$ 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.
--no-prefix
$ 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.
--only
patterns match the workspace package.json#name
; and--only-fs
patterns match the workspace directory; and--ignore
patterns do not match the workspace package.json#name
; and--ignore-fs
patterns do not match the workspace directory.Patterns support any syntax available in micromatch:
workspaces-run --only-fs="**/path/to/dir/**"
workspaces-run --only="workspace-{one,two}"
Flags can be specified multiple times:
workspaces-run --only=<pattern> --only=<patern>
The flags --only-fs
and --ignore-fs
match against a relative path to the
current working directory.
import workspacesRun from "workspaces-run"
await workspacesRun({ cwd }, async (workspace, allWorkspaces) => {
await doSomething(workspace)
})
opts.cwd
(Required)let cwd = process.cwd()
await workspacesRun({ cwd }, ...)
opts.parallel
await workspacesRun({ cwd, parallel: true }, ...)
await workspacesRun({ cwd, parallel: "physical-cores" }, ...)
await workspacesRun({ cwd, parallel: 3 }, ...)
opts.orderByDeps
await workspacesRun({ cwd, orderByDeps: true }, ...)
await workspacesRun({ cwd, orderByDeps: ["devDependencies"] }, ...)
opts.continueOnError
await workspacesRun({ cwd, continueOnError: true }, ...)
The task will be run on a workspace if all of the conditions are true.
only
patterns match the workspace package.json#name
; andonlyFs
patterns match the workspace directory; andignore
patterns do not match the workspace package.json#name
; andignoreFs
patterns do not match the workspace directory.Patterns support any syntax available in micromatch:
await workspacesRun({
cwd,
only: ["workspace-{one,two}"],
onlyFs: ["**/path/to/dir/**"],
}, ...)
The options onlyFs
and ignoreFs
match against a relative path to the cwd
.