pnpm v12 read no `requiredScripts` setting, so `pnpm -r run <script>` ran normally when a selected project lacked a script the workspace declares required. pnpm v11 fails such a run before dispatching anything (`throwIfRequiredScriptIsMissing` in pnpm11/exec/commands/src/runRecursive.ts), with ERR_PNPM_RECURSIVE_RUN_NO_SCRIPT and the message `Missing script "<script>" in packages: <names>`. The config crate now reads `requiredScripts` from pnpm-workspace.yaml into `Config::required_scripts`. The global config.yaml drops it, as v11 does, since it is not a config-file key there; v11 reads no environment variable for it either. The recursive run checks it where v11 does, after `--resume-from` and the dry-run exit, before the hidden-script filter and the no-script check, and after the `pnpm <script>` shorthand decides whether to fall back to `exec`. Projects are named by their manifest name, falling back to their directory. Tested by a run_recursive e2e module that fails without the check, including a nameless project listed by its directory and a --filter run that checks only the selected projects, and a config test for the workspace and global sources. The requiredScripts docs of both versions now say the check covers the projects selected for the run. Part of pnpm/tasks#191.
282 B
282 B
pacquet
| pacquet |
|---|
| patch |
pnpm -r run <script> now honors the requiredScripts setting from pnpm-workspace.yaml. If the script is listed there and a selected project does not define it, the run fails with ERR_PNPM_RECURSIVE_RUN_NO_SCRIPT and names the projects that lack it.