Important: This documentation covers modern versions of Yarn.
For 1.x docs, see classic.yarnpkg.com.
Yarn
yarn addyarn binyarn cache cleanyarn config getyarn config setyarn config unsetyarn configyarn constraints queryyarn constraints sourceyarn constraintsyarn dedupeyarn dlxyarn execyarn explain peer-requirementsyarn explainyarn infoyarn inityarn installyarn linkyarn nodeyarn npm audityarn npm infoyarn npm loginyarn npm logoutyarn npm publishyarn npm tag addyarn npm tag listyarn npm tag removeyarn npm whoamiyarn packyarn patch-commityarn patchyarn plugin import from sourcesyarn plugin importyarn plugin listyarn plugin removeyarn plugin runtimeyarn rebuildyarn removeyarn runyarn searchyarn set resolutionyarn set version from sourcesyarn set versionyarn stageyarn unlinkyarn unplugyarn upyarn upgrade-interactiveyarn version applyyarn version checkyarn versionyarn whyyarn workspaceyarn workspaces focusyarn workspaces foreachyarn workspaces list

yarn workspaces foreach

Plugin

To use this command, first install the workspace-tools plugin: yarn plugin import workspace-tools

Run a command on all workspaces.

Usage

$> yarn workspaces foreach <commandName> ...

Examples

Publish current and all descendant packages :

yarn workspaces foreach npm publish --tolerate-republish

Run build script on current and all descendant packages :

yarn workspaces foreach run build

Run build script on current and all descendant packages in parallel, building package dependencies first :

yarn workspaces foreach -pt run build

Run build script on several packages and all their dependencies, building dependencies first :

yarn workspaces foreach -ptR --from '{workspace-a,workspace-b}' run build

Options

Definition
Description

-R,--recursive

Find packages via dependencies/devDependencies instead of using the workspaces field

--from #0

An array of glob pattern idents from which to base any recursion

-A,--all

Run the command on all workspaces of a project

-v,--verbose

Prefix each output line with the name of the originating workspace

-p,--parallel

Run the commands in parallel

-i,--interlaced

Print the output of commands in real-time instead of buffering it

-j,--jobs #0

The maximum number of parallel tasks that the execution will be limited to; or unlimited

-t,--topological

Run the command after all workspaces it depends on (regular) have finished

--topological-dev

Run the command after all workspaces it depends on (regular + dev) have finished

--include #0

An array of glob pattern idents; only matching workspaces will be traversed

--exclude #0

An array of glob pattern idents; matching workspaces won't be traversed

--no-private

Avoid running the command on private workspaces

--since

Only include workspaces that have been changed since the specified ref.

Details

This command will run a given sub-command on current and all its descendant workspaces. Various flags can alter the exact behavior of the command:

  • If -p,--parallel is set, the commands will be ran in parallel; they'll by default be limited to a number of parallel tasks roughly equal to half your core number, but that can be overridden via -j,--jobs, or disabled by setting -j unlimited.

  • If -p,--parallel and -i,--interlaced are both set, Yarn will print the lines from the output as it receives them. If -i,--interlaced wasn't set, it would instead buffer the output from each process and print the resulting buffers only after their source processes have exited.

  • If -t,--topological is set, Yarn will only run the command after all workspaces that it depends on through the dependencies field have successfully finished executing. If --topological-dev is set, both the dependencies and devDependencies fields will be considered when figuring out the wait points.

  • If -A,--all is set, Yarn will run the command on all the workspaces of a project. By default yarn runs the command only on current and all its descendant workspaces.

  • If -R,--recursive is set, Yarn will find workspaces to run the command on by recursively evaluating dependencies and devDependencies fields, instead of looking at the workspaces fields.

  • If --from is set, Yarn will use the packages matching the 'from' glob as the starting point for any recursive search.

  • If --since is set, Yarn will only run the command on workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the changesetBaseRefs configuration option.

  • The command may apply to only some workspaces through the use of --include which acts as a whitelist. The --exclude flag will do the opposite and will be a list of packages that mustn't execute the script. Both flags accept glob patterns (if valid Idents and supported by micromatch). Make sure to escape the patterns, to prevent your own shell from trying to expand them.

Adding the -v,--verbose flag will cause Yarn to print more information; in particular the name of the workspace that generated the output will be printed at the front of each line.

If the command is run and the script being run does not exist the child workspace will be skipped without error.