Skip to content
Run tasks/scripts across Yarn/Lerna/Bolt/etc workspaces.
TypeScript Shell JavaScript
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
fixture
src
types
.gitignore
.prettierignore
.prettierrc
LICENSE
README.md
bin.js
package-lock.json
package.json
tsconfig.json

README.md

workspaces-run

Run tasks/scripts across Yarn/Lerna/Bolt/etc workspaces.

Install

npm install workspaces-run

CLI

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 --only patterns match the workspace package.json#name; and
  • When any of the --only-fs patterns match the workspace directory; and
  • When all of the --ignore patterns do not match the workspace package.json#name; and
  • When all of the --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.

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 only patterns match the workspace package.json#name; and
  • When any of the onlyFs patterns match the workspace directory; and
  • When all of the ignore patterns do not match the workspace package.json#name; and
  • When all of the ignoreFs 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.

You can’t perform that action at this time.