1.0.2 • Published 3 years ago
workspaces-run v1.0.2
workspaces-run
Run tasks/scripts across Yarn/Lerna/Bolt/etc workspaces.
Install
npm install workspaces-runCLI
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.CLI Filtering
The task will be run on a workspace if all of the conditions are true.
- When any of the
--onlypatterns match the workspacepackage.json#name; and - When any of the
--only-fspatterns match the workspace directory; and - When all of the
--ignorepatterns do not match the workspacepackage.json#name; and - When all of the
--ignore-fspatterns 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.
Library
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 }, ...)Library Filtering
The task will be run on a workspace if all of the conditions are true.
- When any of the
onlypatterns match the workspacepackage.json#name; and - When any of the
onlyFspatterns match the workspace directory; and - When all of the
ignorepatterns do not match the workspacepackage.json#name; and - When all of the
ignoreFspatterns 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.