pnpm/pnpm (pnpm)
### [`v9.12.3`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#9123)
[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.12.2...v9.12.3)
##### Patch Changes
- Don't purge `node_modules`, when typing "n" in the prompt that asks whether to remove `node_modules` before installation [#8655](https://redirect.github.com/pnpm/pnpm/pull/8655).
- Fix a bug causing pnpm to infinitely spawn itself when `manage-package-manager-versions=true` is set and the `.tools` directory is corrupt.
- Use `crypto.hash`, when available, for improved performance [#8629](https://redirect.github.com/pnpm/pnpm/pull/8629).
- Fixed a race condition in temporary file creation in the store by including worker thread ID in filename. Previously, multiple worker threads could attempt to use the same temporary file. Temporary files now include both process ID and thread ID for uniqueness [#8703](https://redirect.github.com/pnpm/pnpm/pull/8703).
- All commands should read settings from the `package.json` at the root of the workspace [#8667](https://redirect.github.com/pnpm/pnpm/issues/8667).
- When `manage-package-manager-versions` is set to `true`, errors spawning a self-managed version of `pnpm` will now be shown (instead of being silent).
- Pass the find command to npm, it is an alias for npm search
### [`v9.12.2`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#9122)
[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.12.1...v9.12.2)
##### Patch Changes
- When checking whether a file in the store has executable permissions, the new approach checks if at least one of the executable bits (owner, group, and others) is set to 1. Previously, a file was incorrectly considered executable only when all the executable bits were set to 1. This fix ensures that files with any executable permission, regardless of the user class, are now correctly identified as executable [#8546](https://redirect.github.com/pnpm/pnpm/issues/8546).
### [`v9.12.1`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#9121)
[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.12.0...v9.12.1)
##### Patch Changes
- `pnpm update --latest` should not update the automatically installed peer dependencies [#6657](https://redirect.github.com/pnpm/pnpm/issues/6657).
- `pnpm publish` should be able to publish from a local tarball [#7950](https://redirect.github.com/pnpm/pnpm/issues/7950).
- The pnpx command should work correctly on Windows, when pnpm is installed via the standalone installation script [#8608](https://redirect.github.com/pnpm/pnpm/pull/8608).
- Prevent `EBUSY` errors caused by creating symlinks in parallel `dlx` processes [#8604](https://redirect.github.com/pnpm/pnpm/pull/8604).
- Fix maximum call stack size exceeded error related to circular workspace dependencies [#8599](https://redirect.github.com/pnpm/pnpm/pull/8599).
### [`v9.12.0`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#9120)
[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.11.0...v9.12.0)
##### Minor Changes
- Fix peer dependency resolution dead lock [#8570](https://redirect.github.com/pnpm/pnpm/issues/8570). This change might change some of the keys in the `snapshots` field inside `pnpm-lock.yaml` but it should happen very rarely.
- `pnpm outdated` command supports now a `--sort-by=name` option for sorting outdated dependencies by package name [#8523](https://redirect.github.com/pnpm/pnpm/pull/8523).
- Added the ability for `overrides` to remove dependencies by specifying `"-"` as the field value [#8572](https://redirect.github.com/pnpm/pnpm/issues/8572). For example, to remove `lodash` from the dependencies, use this configuration in `package.json`:
```json
{
"pnpm": {
"overrides": {
"lodash": "-"
}
}
}
```
##### Patch Changes
- Fixed an issue where `pnpm list --json pkg` showed `"private": false` for a private package [#8519](https://redirect.github.com/pnpm/pnpm/issues/8519).
- Packages with `libc` that differ from `pnpm.supportedArchitectures.libc` are not downloaded [#7362](https://redirect.github.com/pnpm/pnpm/issues/7362).
- Prevent `ENOENT` errors caused by running `store prune` in parallel [#8586](https://redirect.github.com/pnpm/pnpm/pull/8586).
- Add issues alias to `pnpm bugs` [#8596](https://redirect.github.com/pnpm/pnpm/pull/8596).
### [`v9.11.0`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#9110)
[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.10.0...v9.11.0)
##### Minor Changes
- Experimental: added `pnpm cache` commands for inspecting the metadata cache [#8512](https://redirect.github.com/pnpm/pnpm/pull/8512).
##### Patch Changes
- Fix a regression in which `pnpm deploy` with `node-linker=hoisted` produces an empty `node_modules` directory [#6682](https://redirect.github.com/pnpm/pnpm/issues/6682).
- Don't print a warning when linking packages globally [#4761](https://redirect.github.com/pnpm/pnpm/issues/4761).
- `pnpm deploy` should work in workspace with `shared-workspace-lockfile=false` [#8475](https://redirect.github.com/pnpm/pnpm/issues/8475).
### [`v9.10.0`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#9100)
[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.9.0...v9.10.0)
##### Minor Changes
- Support for a new CLI flag, `--exclude-peers`, added to the `list` and `why` commands. When `--exclude-peers` is used, peer dependencies are not printed in the results, but dependencies of peer dependencies are still scanned [#8506](https://redirect.github.com/pnpm/pnpm/pull/8506).
- Added a new setting to `package.json` at `pnpm.auditConfig.ignoreGhsas` for ignoring vulnerabilities by their GHSA code [#6838](https://redirect.github.com/pnpm/pnpm/issues/6838).
For instance:
```json
{
"pnpm": {
"auditConfig": {
"ignoreGhsas": [
"GHSA-42xw-2xvc-qx8m",
"GHSA-4w2v-q235-vp99",
"GHSA-cph5-m8f7-6c5x",
"GHSA-vh95-rmgr-6w4m"
]
}
}
}
```
##### Patch Changes
- Throw an exception if pnpm switches to the same version of itself.
- Reduce memory usage during peer dependencies resolution.
### [`v9.9.0`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#990)
[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.8.0...v9.9.0)
##### Minor Changes
- **Minor breaking change.** This change might result in resolving your peer dependencies slightly differently but we don't expect it to introduce issues.
We had to optimize how we resolve peer dependencies in order to fix some [infinite loops and out-of-memory errors during peer dependencies resolution](https://redirect.github.com/pnpm/pnpm/issues/8370).
When a peer dependency is a prod dependency somewhere in the dependency graph (with the same version), pnpm will resolve the peers of that peer dependency in the same way across the subgraph.
For example, we have `react-dom` in the peer deps of the `form` and `button` packages. `card` has `react-dom` and `react` as regular dependencies and `card` is a dependency of `form`.
These are the direct dependencies of our example project:
form
react@16
react-dom@16
These are the dependencies of card:
button
react@17
react-dom@16
When resolving peers, pnpm will not re-resolve `react-dom` for `card`, even though `card` shadows `react@16` from the root with `react@17`. So, all 3 packages (`form`, `card`, and `button`) will use `react-dom@16`, which in turn uses `react@16`. `form` will use `react@16`, while `card` and `button` will use `react@17`.
Before this optimization `react-dom@16` was duplicated for the `card`, so that `card` and `button` would use a `react-dom@16` instance that uses `react@17`.
Before the change:
form
-> react-dom@16(react@16)
-> react@16
card
-> react-dom@16(react@17)
-> react@17
button
-> react-dom@16(react@17)
-> react@17
After the change
form
-> react-dom@16(react@16)
-> react@16
card
-> react-dom@16(react@16)
-> react@17
button
-> react-dom@16(react@16)
-> react@17
##### Patch Changes
- `pnpm deploy` should write the `node_modules/.modules.yaml` to the `node_modules` directory within the deploy directory [#7731](https://redirect.github.com/pnpm/pnpm/issues/7731).
- Don't override a symlink in `node_modules` if it already points to the right location [pnpm/symlink-dir#54](https://redirect.github.com/pnpm/symlink-dir/pull/54).
### [`v9.8.0`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#980)
[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.7.1...v9.8.0)
##### Minor Changes
- Added a new command for upgrading pnpm itself when it isn't managed by Corepack: `pnpm self-update`. This command will work, when pnpm was installed via the standalone script from the [pnpm installation page](https://pnpm.io/installation#using-a-standalone-script) [#8424](https://redirect.github.com/pnpm/pnpm/pull/8424).
When executed in a project that has a `packageManager` field in its `package.json` file, pnpm will update its version in the `packageManager` field.
##### Patch Changes
- CLI tools installed in the root of the workspace should be added to the PATH, when running scripts and `use-node-version` is set.
- `pnpm setup` should never switch to another version of pnpm.
This fixes installation with the standalone script from a directory that has a `package.json` with the `packageManager` field. pnpm was installing the version of pnpm specified in the `packageManager` field due to this issue.
- Ignore non-string value in the os, cpu, libc fields, which checking optional dependencies [#8431](https://redirect.github.com/pnpm/pnpm/pull/8431).
- Remember the state of edit dir, allow running `pnpm patch-commit` the second time without having to re-run `pnpm patch`.
### [`v9.7.1`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#971)
[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.7.0...v9.7.1)
##### Patch Changes
- Fixed passing `public-hoist-pattern` and `hoist-pattern` via env variables [#8339](https://redirect.github.com/pnpm/pnpm/issues/8339).
- `pnpm setup` no longer creates Batch/Powershell scripts on Linux and macOS [#8418](https://redirect.github.com/pnpm/pnpm/pull/8418).
- When dlx uses cache, use the real directory path not the symlink to the cache [#8421](https://redirect.github.com/pnpm/pnpm/pull/8421).
- `pnpm exec` now supports executionEnv [#8356](https://redirect.github.com/pnpm/pnpm/issues/8356).
- Remove warnings for non-root `pnpm` field, add warnings for non-root `pnpm` subfields that aren't `executionEnv` [#8143](https://redirect.github.com/pnpm/pnpm/issues/8413).
- Replace semver in "peerDependency" with workspace protocol [#8355](https://redirect.github.com/pnpm/pnpm/issues/8355).
- Fix a bug in `patch-commit` in which relative path is rejected [#8405](https://redirect.github.com/pnpm/pnpm/pull/8405).
- Update Node.js in `@pnpm/exe` to v20.
### [`v9.7.0`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#970)
[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.6.0...v9.7.0)
##### Minor Changes
- Added pnpm version management to pnpm. If the `manage-package-manager-versions` setting is set to `true`, pnpm will switch to the version specified in the `packageManager` field of `package.json` [#8363](https://redirect.github.com/pnpm/pnpm/pull/8363). This is the same field used by Corepack. Example:
```json
{
"packageManager": "pnpm@9.3.0"
}
```
- Added the ability to apply patch to all versions:
If the key of `pnpm.patchedDependencies` is a package name without a version (e.g. `pkg`), pnpm will attempt to apply the patch to all versions of
the package. Failures will be skipped.
If it is a package name and an exact version (e.g. `pkg@x.y.z`), pnpm will attempt to apply the patch to that exact version only. Failures will
cause pnpm to fail.
If there's only one version of `pkg` installed, `pnpm patch pkg` and subsequent `pnpm patch-commit $edit_dir` will create an entry named `pkg` in
`pnpm.patchedDependencies`. And pnpm will attempt to apply this patch to other versions of `pkg` in the future.
If there are multiple versions of `pkg` installed, `pnpm patch pkg` will ask which version to edit and whether to attempt to apply the patch to all.
If the user chooses to apply the patch to all, `pnpm patch-commit $edit_dir` would create a `pkg` entry in `pnpm.patchedDependencies`.
If the user chooses not to apply the patch to all, `pnpm patch-commit $edit_dir` would create a `pkg@x.y.z` entry in `pnpm.patchedDependencies` with
`x.y.z` being the version the user chose to edit.
If the user runs `pnpm patch pkg@x.y.z` with `x.y.z` being the exact version of `pkg` that has been installed, `pnpm patch-commit $edit_dir` will always
create a `pkg@x.y.z` entry in `pnpm.patchedDependencies`.
- Change the default edit dir location when running `pnpm patch` from a temporary directory to `node_modules/.pnpm_patches/pkg[@version]` to allow the code editor to open the edit dir in the same file tree as the main project.
- Substitute environment variables in config keys [#6679](https://redirect.github.com/pnpm/pnpm/issues/6679).
##### Patch Changes
- `pnpm install` should run `node-gyp rebuild` if the project has a `binding.gyp` file even if the project doesn't have an install script [#8293](https://redirect.github.com/pnpm/pnpm/issues/8293).
- Print warnings to stderr [#8342](https://redirect.github.com/pnpm/pnpm/pull/8342).
- Peer dependencies of optional peer dependencies should be automatically installed [#8323](https://redirect.github.com/pnpm/pnpm/issues/8323).
### [`v9.6.0`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#960)
[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.5.0...v9.6.0)
##### Minor Changes
- Support specifying node version (via `pnpm.executionEnv.nodeVersion` in `package.json`) for running lifecycle scripts per each package in a workspace [#6720](https://redirect.github.com/pnpm/pnpm/issues/6720).
- Overrides now support the [`catalogs:` protocol](https://pnpm.io/catalogs) [#8303](https://redirect.github.com/pnpm/pnpm/issues/8303).
##### Patch Changes
- The `pnpm deploy` command now supports the [`catalog:` protocol](https://pnpm.io/catalogs) [#8298](https://redirect.github.com/pnpm/pnpm/pull/8298).
- The `pnpm outdated` command now supports the [`catalog:` protocol](https://pnpm.io/catalogs) [#8304](https://redirect.github.com/pnpm/pnpm/pull/8304).
- Correct the error message when trying to run `pnpm patch` without `node_modules/.modules.yaml` [#8257](https://redirect.github.com/pnpm/pnpm/issues/8257).
- Silent reporting fixed with the `pnpm exec` command [#7608](https://redirect.github.com/pnpm/pnpm/issues/7608).
- Add registries information to the calculation of dlx cache hash [#8299](https://redirect.github.com/pnpm/pnpm/pull/8299).
### [`v9.5.0`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#950)
[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.4.0...v9.5.0)
##### Minor Changes
- Added support for [catalogs](https://redirect.github.com/pnpm/rfcs/blob/main/text/0001-catalogs.md) [8122](#https://redirect.github.com/pnpm/pnpm/pull/8122).
Catalogs may be declared in the `pnpm-workspace.yaml` file. For example:
```yaml
```
### [`v9.4.0`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#940)
[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.3.0...v9.4.0)
##### Minor Changes
- Some registries allow the exact same content to be published under different package names and/or versions. This breaks the validity checks of packages in the store. To avoid errors when verifying the names and versions of such packages in the store, you may now set the `strict-store-pkg-content-check` setting to `false` [#4724](https://redirect.github.com/pnpm/pnpm/issues/4724).
##### Patch Changes
- Fix `package-manager-strict-version` missing in config [#8195](https://redirect.github.com/pnpm/pnpm/issues/8195).
- If install is performed on a subset of workspace projects, always create an up-to-date lockfile first. So, a partial install can be performed only on a fully resolved (non-partial) lockfile [#8165](https://redirect.github.com/pnpm/pnpm/issues/8165).
- Handle workspace protocol with any semver range specifier, when used in peer dependencies [#7578](https://redirect.github.com/pnpm/pnpm/issues/7578).
### [`v9.3.0`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#930)
[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.2.0...v9.3.0)
##### Minor Changes
- **Semi-breaking.** Dependency key names in the lockfile are shortened if they are longer than 1000 characters. We don't expect this change to affect many users. Affected users most probably can't run install successfully at the moment. This change is required to fix some edge cases in which installation fails with an out-of-memory error or "Invalid string length (RangeError: Invalid string length)" error. The max allowed length of the dependency key can be controlled with the `peers-suffix-max-length` setting [#8177](https://redirect.github.com/pnpm/pnpm/pull/8177).
##### Patch Changes
- Set `reporter-hide-prefix` to `true` by default for `pnpm exec`. In order to show prefix, the user now has to explicitly set `reporter-hide-prefix=false` [#8174](https://redirect.github.com/pnpm/pnpm/issues/8174).
### [`v9.2.0`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#920)
[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.1.4...v9.2.0)
##### Minor Changes
- If `package-manager-strict-version` is set to `true`, pnpm will fail if its version doesn't exactly match the version in the "packageManager" field of `package.json`.
##### Patch Changes
- Update `@yarnpkg/pnp` to the latest version, fixing issue with `node:` imports [#8161](https://redirect.github.com/pnpm/pnpm/issues/8161).
- Deduplicate bin names to prevent race condition and corrupted bin scripts [#7833](https://redirect.github.com/pnpm/pnpm/issues/7833).
- pnpm doesn't fail if its version doesn't match the one specified in the "packageManager" field of `package.json` [#8087](https://redirect.github.com/pnpm/pnpm/issues/8087).
- `exec` now also streams prefixed output when `--recursive` or `--parallel` is specified just as `run` does [#8065](https://redirect.github.com/pnpm/pnpm/issues/8065).
### [`v9.1.4`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#914)
[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.1.3...v9.1.4)
##### Patch Changes
- Improved the performance of the resolution stage by changing how missing peer dependencies are detected [#8144](https://redirect.github.com/pnpm/pnpm/pull/8144).
### [`v9.1.3`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#913)
[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.1.2...v9.1.3)
##### Patch Changes
- Fix a bug in which a dependency that is both optional for one package but non-optional for another is omitted when `optional=false` [#8066](https://redirect.github.com/pnpm/pnpm/issues/8066).
- Clear resolution cache before starting peer dependencies resolution [#8109](https://redirect.github.com/pnpm/pnpm/pull/8109).
- Reduce memory usage by peer dependencies resolution [#8072](https://redirect.github.com/pnpm/pnpm/issues/8072).
### [`v9.1.2`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#912)
[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.1.1...v9.1.2)
##### Patch Changes
- Reduced memory usage during peer dependencies resolution [#8084](https://redirect.github.com/pnpm/pnpm/pull/8084).
- Details in the `pnpm licenses` output are not misplaced anymore [#8071](https://redirect.github.com/pnpm/pnpm/pull/8071).
### [`v9.1.1`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#911)
[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.1.0...v9.1.1)
##### Patch Changes
- Improve the performance of the peers resolution stage by utilizing more cache [#8058](https://redirect.github.com/pnpm/pnpm/pull/8058).
- Overrides with `link:` now preserve absolute path [#8053](https://redirect.github.com/pnpm/pnpm/issues/8053).
- Fix incorrect path when resolving relative `file:` overrides for workspace package [#8053](https://redirect.github.com/pnpm/pnpm/issues/8053).
- Print a better error message when `resolution-mode` is set to `time-based` and the registry fails to return the `"time"` field in the package's metadata.
- Fix shell completion on MinGW-w64 environment.
### [`v9.1.0`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#910)
[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.0.6...v9.1.0)
##### Minor Changes
- New setting called `virtual-store-dir-max-length` added to modify the maximum allowed length of the directories inside `node_modules/.pnpm`. The default length is set to 120 characters. This setting is particularly useful on Windows, where there is a limit to the maximum length of a file path [#7355](https://redirect.github.com/pnpm/pnpm/issues/7355).
##### Patch Changes
- A dependency is hoisted to resolve an optional peer dependency only if it satisfies the range provided for the optional peer dependency [#8028](https://redirect.github.com/pnpm/pnpm/pull/8028).
- Details in the `pnpm outdated` output are wrapped correctly [#8037](https://redirect.github.com/pnpm/pnpm/pull/8037).
- Fix `Cannot read properties of undefined (reading 'missingPeersOfChildren')` exception that happens on install [#8041](https://redirect.github.com/pnpm/pnpm/issues/8041).
- Explicitly throw an error when user attempts to run `publish` or `pack` when `bundledDependencies` is set but `node-linker` isn't `hoisted`.
- `pnpm update` should not fail when there's an aliased local workspace dependency [#7975](https://redirect.github.com/pnpm/pnpm/issues/7975).
### [`v9.0.6`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#906)
[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.0.5...v9.0.6)
##### Patch Changes
- Lockfiles that have git-hosted dependencies specified should be correctly converted to the new lockfile format [#7990](https://redirect.github.com/pnpm/pnpm/issues/7990).
- Don't upgrade the lockfile format on `pnpm install --frozen-lockfile` [#7991](https://redirect.github.com/pnpm/pnpm/issues/7991).
### [`v9.0.5`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#905)
[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.0.4...v9.0.5)
##### Patch Changes
- Lockfiles with local or git-hosted dependencies are now successfully converted to the new lockfile format [#7955](https://redirect.github.com/pnpm/pnpm/issues/7955).
- Resolve peer dependencies correctly, when they have prerelease versions [#7977](https://redirect.github.com/pnpm/pnpm/issues/7977).
- Fix aliased dependencies resolution on repeat install with existing lockfile, when the aliased dependency doesn't specify a version or range [#7957](https://redirect.github.com/pnpm/pnpm/issues/7957).
- The lockfile should be saved in the new format even if it is up-to-date.
### [`v9.0.4`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#904)
[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.0.3...v9.0.4)
##### Patch Changes
- Fix aliased dependencies resolution on repeat install with existing lockfile [#7957](https://redirect.github.com/pnpm/pnpm/issues/7957).
- The `engines.pnpm` field in the `package.json` files of dependencies should be ignored [#7965](https://redirect.github.com/pnpm/pnpm/issues/7965).
### [`v9.0.3`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#903)
[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.0.2...v9.0.3)
##### Patch Changes
- If the `script-shell` option is configured to a `.bat`/`.cmd` file on Windows, pnpm will now error with `ERR_PNPM_INVALID_SCRIPT_SHELL_WINDOWS`. Newer [versions of Node.js released in April 2024](https://nodejs.org/en/blog/vulnerability/april-2024-security-releases-2) do not support executing these files directly without behavior differences. If the `script-shell` option is necessary for your use-case, please set a `.exe` file instead.
- Print a hint about the `package-manager-strict` setting, when pnpm doesn't match the version specified in the `packageManager` field in `package.json`.
- `pnpm completion` command should work in the standalone version of pnpm [#7948](https://redirect.github.com/pnpm/pnpm/issues/7948).
### [`v9.0.2`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#902)
[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.0.1...v9.0.2)
##### Patch Changes
- Fixed an issue where optional dependencies were not linked into the dependent's `node_modules` [#7943](https://redirect.github.com/pnpm/pnpm/issues/7943).
### [`v9.0.1`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#901)
[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.0.0...v9.0.1)
##### Patch Changes
- `pnpm install --frozen-lockfile` should work with lockfiles generated by pnpm v8, if they don't need updates [#7934](https://redirect.github.com/pnpm/pnpm/issues/7934).
### [`v9.0.0`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#900)
[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v8.15.9...v9.0.0)
##### Major Changes
- Node.js v16 support discontinued
If you still require Node.js 16, don't worry. We ship pnpm bundled with Node.js. This means that regardless of which Node.js version you've installed, pnpm will operate using the necessary Node.js runtime. For this to work you need to install pnpm either using the [standalone script](https://pnpm.io/installation#using-a-standalone-script) or install the `@pnpm/exe` package.
- Configuration updates:
- [`dedupe-injected-deps`](https://pnpm.io/npmrc#dedupe-injected-deps): enabled by default.
- [`link-workspace-packages`](https://pnpm.io/npmrc#link-workspace-packages): disabled by default. This means that by default, dependencies will be linked from workspace packages only when they are specified using the [workspace protocol](https://pnpm.io/workspaces#workspace-protocol-workspace).
- [`hoist-workspace-packages`](https://pnpm.io/npmrc#hoist-workspace-packages): enabled by default.
- [`enable-pre-post-scripts`](https://pnpm.io/cli/run#enable-pre-post-scripts): enabled by default.
- Use the same directory for state files on macOS as on Linux (`~/.local/state/pnpm`).
- pnpm will now check the `package.json` file for a `packageManager` field. If this field is present and specifies a different package manager or a different version of pnpm than the one you're currently using, pnpm will not proceed. This ensures that you're always using the correct package manager and version that the project requires.
- Lockfile changes:
- Lockfile v9 is adopted. This new format has changes for better readability, and better resistence to Git conflicts.
- Support for lockfile v5 is dropped. Use pnpm v8 to convert lockfile v5 to lockfile v6 [#7470](https://redirect.github.com/pnpm/pnpm/pull/7470).
- Dependency resolution changes:
- Correct resolution of peer dependencies that have their own peer dependencies.
Related issue: [#7444](https://redirect.github.com/pnpm/pnpm/issues/7444).
Related PR: [#7606](https://redirect.github.com/pnpm/pnpm/pull/7606).
- Optional peer dependencies may be resolved from any packages in the dependency graph [#7830](https://redirect.github.com/pnpm/pnpm/pull/7830).
- `pnpm licenses list` prints license information of all versions of the same package in case different versions use different licenses. The format of the `pnpm licenses list --json` output has been changed [#7528](https://redirect.github.com/pnpm/pnpm/pull/7528).
- A new command added for printing completion code to the console: `pnpm completion [shell]`. The old command that modified the user's shell dotfiles has been removed [#3083](https://redirect.github.com/pnpm/pnpm/issues/3083).
- When installing git-hosted dependencies, only pick the files that would be packed with the package [#7638](https://redirect.github.com/pnpm/pnpm/pull/7638).
##### Minor Changes
- It is now possible to install only a subdirectory from a Git repository.
For example, `pnpm add github:user/repo#path:packages/foo` will add a dependency from the `packages/foo` subdirectory.
This new parameter may be combined with other supported parameters separated by `&`. For instance, the next command will install the same package from the `dev` branch: `pnpm add github:user/repo#dev&path:packages/bar`.
Related issue: [#4765](https://redirect.github.com/pnpm/pnpm/issues/4765).
Related PR: [#7487](https://redirect.github.com/pnpm/pnpm/pull/7487).
- `node-gyp` updated to version 10.
- PowerShell completion support added [#7597](https://redirect.github.com/pnpm/pnpm/pull/7597).
- Support `node-options` option inside `.npmrc` file when running scripts [#7596](https://redirect.github.com/pnpm/pnpm/issues/7596).
- Added support for registry-scoped SSL configurations (cert, key, and ca). Three new settings supported: `:certfile`, `:keyfile`, and `:ca`. For instance:
//registry.mycomp.com/:certfile=server-cert.pem
//registry.mycomp.com/:keyfile=server-key.pem
//registry.mycomp.com/:cafile=client-cert.pem
Related issue: [#7427](https://redirect.github.com/pnpm/pnpm/issues/7427).
Related PR: [#7626](https://redirect.github.com/pnpm/pnpm/pull/7626).
- Add a field named `ignoredOptionalDependencies`. This is an array of strings. If an optional dependency has its name included in this array, it will be skipped [#7714](https://redirect.github.com/pnpm/pnpm/pull/7714).
- The checksum of the `.pnpmfile.cjs` is saved into the lockfile. If the pnpmfile gets modified, the lockfile is reanalyzed to apply the changes [#7662](https://redirect.github.com/pnpm/pnpm/pull/7662).
- Added cache for `pnpm dlx` [#5277](https://redirect.github.com/pnpm/pnpm/issues/5277).
##### Patch Changes
- Package tarballs are not downloaded during `--lockfile-only` installation [#1328](https://redirect.github.com/pnpm/pnpm/issues/1328).
- Peer dependency rules should only affect reporting, not data in the lockfile [#7758](https://redirect.github.com/pnpm/pnpm/pull/7758).
- Link overrides should be able to use absolute path [#7749](https://redirect.github.com/pnpm/pnpm/pull/7749).
- `pnpm dlx` should not read settings from the current working directory [#7916](https://redirect.github.com/pnpm/pnpm/pull/7916).
### [`v8.15.9`](https://redirect.github.com/pnpm/pnpm/releases/tag/v8.15.9): pnpm 8.15.9
[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v8.15.8...v8.15.9)
#### Patch Changes
- Deduplicate bin names to prevent race condition and corrupted bin scripts [#7833](https://redirect.github.com/pnpm/pnpm/issues/7833).
#### Platinum Sponsors
#### Gold Sponsors
#### Our Silver Sponsors
### [`v8.15.8`](https://redirect.github.com/pnpm/pnpm/releases/tag/v8.15.8)
[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v8.15.7...v8.15.8)
#### Patch Changes
- Upgrade tar to v6.2.1 in the dependences [#7939](https://redirect.github.com/pnpm/pnpm/issues/7939).
- If the `script-shell` option is configured to a `.bat`/`.cmd` file on Windows, pnpm will now error with `ERR_PNPM_INVALID_SCRIPT_SHELL_WINDOWS`. Newer [versions of Node.js released in April 2024](https://nodejs.org/en/blog/vulnerability/april-2024-security-releases-2) do not support executing these files directly without behavior differences. If the `script-shell` option is necessary for your use-case, please set a `.exe` file instead.
#### Platinum Sponsors
#### Gold Sponsors
#### Our Silver Sponsors
### [`v8.15.7`](https://redirect.github.com/pnpm/pnpm/releases/tag/v8.15.7)
[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v8.15.6...v8.15.7)
#### Patch Changes
- `pnpm config get` prints a comma-separated list for an array value instead of nothing.
- It should be possible to publish a tarball with custom dist-tag [#7845](https://redirect.github.com/pnpm/pnpm/issues/7845).
- Print the list of packages that were not built because they are ignored by configuration settings.
#### Platinum Sponsors
#### Gold Sponsors
#### Our Silver Sponsors
### [`v8.15.6`](https://redirect.github.com/pnpm/pnpm/releases/tag/v8.15.6)
[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v8.15.5...v8.15.6)
#### Patch Changes
- The exit code of the child process should be preserved on `pnpm run` [#7817](https://redirect.github.com/pnpm/pnpm/issues/7817).
- When sorting packages in a workspace, take into account workspace dependencies specified as `peerDependencies` [#7813](https://redirect.github.com/pnpm/pnpm/issues/7813).
- Add `--ignore-scripts` argument to `prune` command [#7836](https://redirect.github.com/pnpm/pnpm/pull/7836).
#### Platinum Sponsors
This PR contains the following updates:
8.10.2
->9.12.3
Release Notes
pnpm/pnpm (pnpm)
### [`v9.12.3`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#9123) [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.12.2...v9.12.3) ##### Patch Changes - Don't purge `node_modules`, when typing "n" in the prompt that asks whether to remove `node_modules` before installation [#8655](https://redirect.github.com/pnpm/pnpm/pull/8655). - Fix a bug causing pnpm to infinitely spawn itself when `manage-package-manager-versions=true` is set and the `.tools` directory is corrupt. - Use `crypto.hash`, when available, for improved performance [#8629](https://redirect.github.com/pnpm/pnpm/pull/8629). - Fixed a race condition in temporary file creation in the store by including worker thread ID in filename. Previously, multiple worker threads could attempt to use the same temporary file. Temporary files now include both process ID and thread ID for uniqueness [#8703](https://redirect.github.com/pnpm/pnpm/pull/8703). - All commands should read settings from the `package.json` at the root of the workspace [#8667](https://redirect.github.com/pnpm/pnpm/issues/8667). - When `manage-package-manager-versions` is set to `true`, errors spawning a self-managed version of `pnpm` will now be shown (instead of being silent). - Pass the find command to npm, it is an alias for npm search ### [`v9.12.2`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#9122) [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.12.1...v9.12.2) ##### Patch Changes - When checking whether a file in the store has executable permissions, the new approach checks if at least one of the executable bits (owner, group, and others) is set to 1. Previously, a file was incorrectly considered executable only when all the executable bits were set to 1. This fix ensures that files with any executable permission, regardless of the user class, are now correctly identified as executable [#8546](https://redirect.github.com/pnpm/pnpm/issues/8546). ### [`v9.12.1`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#9121) [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.12.0...v9.12.1) ##### Patch Changes - `pnpm update --latest` should not update the automatically installed peer dependencies [#6657](https://redirect.github.com/pnpm/pnpm/issues/6657). - `pnpm publish` should be able to publish from a local tarball [#7950](https://redirect.github.com/pnpm/pnpm/issues/7950). - The pnpx command should work correctly on Windows, when pnpm is installed via the standalone installation script [#8608](https://redirect.github.com/pnpm/pnpm/pull/8608). - Prevent `EBUSY` errors caused by creating symlinks in parallel `dlx` processes [#8604](https://redirect.github.com/pnpm/pnpm/pull/8604). - Fix maximum call stack size exceeded error related to circular workspace dependencies [#8599](https://redirect.github.com/pnpm/pnpm/pull/8599). ### [`v9.12.0`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#9120) [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.11.0...v9.12.0) ##### Minor Changes - Fix peer dependency resolution dead lock [#8570](https://redirect.github.com/pnpm/pnpm/issues/8570). This change might change some of the keys in the `snapshots` field inside `pnpm-lock.yaml` but it should happen very rarely. - `pnpm outdated` command supports now a `--sort-by=name` option for sorting outdated dependencies by package name [#8523](https://redirect.github.com/pnpm/pnpm/pull/8523). - Added the ability for `overrides` to remove dependencies by specifying `"-"` as the field value [#8572](https://redirect.github.com/pnpm/pnpm/issues/8572). For example, to remove `lodash` from the dependencies, use this configuration in `package.json`: ```json { "pnpm": { "overrides": { "lodash": "-" } } } ``` ##### Patch Changes - Fixed an issue where `pnpm list --json pkg` showed `"private": false` for a private package [#8519](https://redirect.github.com/pnpm/pnpm/issues/8519). - Packages with `libc` that differ from `pnpm.supportedArchitectures.libc` are not downloaded [#7362](https://redirect.github.com/pnpm/pnpm/issues/7362). - Prevent `ENOENT` errors caused by running `store prune` in parallel [#8586](https://redirect.github.com/pnpm/pnpm/pull/8586). - Add issues alias to `pnpm bugs` [#8596](https://redirect.github.com/pnpm/pnpm/pull/8596). ### [`v9.11.0`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#9110) [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.10.0...v9.11.0) ##### Minor Changes - Experimental: added `pnpm cache` commands for inspecting the metadata cache [#8512](https://redirect.github.com/pnpm/pnpm/pull/8512). ##### Patch Changes - Fix a regression in which `pnpm deploy` with `node-linker=hoisted` produces an empty `node_modules` directory [#6682](https://redirect.github.com/pnpm/pnpm/issues/6682). - Don't print a warning when linking packages globally [#4761](https://redirect.github.com/pnpm/pnpm/issues/4761). - `pnpm deploy` should work in workspace with `shared-workspace-lockfile=false` [#8475](https://redirect.github.com/pnpm/pnpm/issues/8475). ### [`v9.10.0`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#9100) [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.9.0...v9.10.0) ##### Minor Changes - Support for a new CLI flag, `--exclude-peers`, added to the `list` and `why` commands. When `--exclude-peers` is used, peer dependencies are not printed in the results, but dependencies of peer dependencies are still scanned [#8506](https://redirect.github.com/pnpm/pnpm/pull/8506). - Added a new setting to `package.json` at `pnpm.auditConfig.ignoreGhsas` for ignoring vulnerabilities by their GHSA code [#6838](https://redirect.github.com/pnpm/pnpm/issues/6838). For instance: ```json { "pnpm": { "auditConfig": { "ignoreGhsas": [ "GHSA-42xw-2xvc-qx8m", "GHSA-4w2v-q235-vp99", "GHSA-cph5-m8f7-6c5x", "GHSA-vh95-rmgr-6w4m" ] } } } ``` ##### Patch Changes - Throw an exception if pnpm switches to the same version of itself. - Reduce memory usage during peer dependencies resolution. ### [`v9.9.0`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#990) [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.8.0...v9.9.0) ##### Minor Changes - **Minor breaking change.** This change might result in resolving your peer dependencies slightly differently but we don't expect it to introduce issues. We had to optimize how we resolve peer dependencies in order to fix some [infinite loops and out-of-memory errors during peer dependencies resolution](https://redirect.github.com/pnpm/pnpm/issues/8370). When a peer dependency is a prod dependency somewhere in the dependency graph (with the same version), pnpm will resolve the peers of that peer dependency in the same way across the subgraph. For example, we have `react-dom` in the peer deps of the `form` and `button` packages. `card` has `react-dom` and `react` as regular dependencies and `card` is a dependency of `form`. These are the direct dependencies of our example project: form react@16 react-dom@16 These are the dependencies of card: button react@17 react-dom@16 When resolving peers, pnpm will not re-resolve `react-dom` for `card`, even though `card` shadows `react@16` from the root with `react@17`. So, all 3 packages (`form`, `card`, and `button`) will use `react-dom@16`, which in turn uses `react@16`. `form` will use `react@16`, while `card` and `button` will use `react@17`. Before this optimization `react-dom@16` was duplicated for the `card`, so that `card` and `button` would use a `react-dom@16` instance that uses `react@17`. Before the change: form -> react-dom@16(react@16) -> react@16 card -> react-dom@16(react@17) -> react@17 button -> react-dom@16(react@17) -> react@17 After the change form -> react-dom@16(react@16) -> react@16 card -> react-dom@16(react@16) -> react@17 button -> react-dom@16(react@16) -> react@17 ##### Patch Changes - `pnpm deploy` should write the `node_modules/.modules.yaml` to the `node_modules` directory within the deploy directory [#7731](https://redirect.github.com/pnpm/pnpm/issues/7731). - Don't override a symlink in `node_modules` if it already points to the right location [pnpm/symlink-dir#54](https://redirect.github.com/pnpm/symlink-dir/pull/54). ### [`v9.8.0`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#980) [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.7.1...v9.8.0) ##### Minor Changes - Added a new command for upgrading pnpm itself when it isn't managed by Corepack: `pnpm self-update`. This command will work, when pnpm was installed via the standalone script from the [pnpm installation page](https://pnpm.io/installation#using-a-standalone-script) [#8424](https://redirect.github.com/pnpm/pnpm/pull/8424). When executed in a project that has a `packageManager` field in its `package.json` file, pnpm will update its version in the `packageManager` field. ##### Patch Changes - CLI tools installed in the root of the workspace should be added to the PATH, when running scripts and `use-node-version` is set. - `pnpm setup` should never switch to another version of pnpm. This fixes installation with the standalone script from a directory that has a `package.json` with the `packageManager` field. pnpm was installing the version of pnpm specified in the `packageManager` field due to this issue. - Ignore non-string value in the os, cpu, libc fields, which checking optional dependencies [#8431](https://redirect.github.com/pnpm/pnpm/pull/8431). - Remember the state of edit dir, allow running `pnpm patch-commit` the second time without having to re-run `pnpm patch`. ### [`v9.7.1`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#971) [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.7.0...v9.7.1) ##### Patch Changes - Fixed passing `public-hoist-pattern` and `hoist-pattern` via env variables [#8339](https://redirect.github.com/pnpm/pnpm/issues/8339). - `pnpm setup` no longer creates Batch/Powershell scripts on Linux and macOS [#8418](https://redirect.github.com/pnpm/pnpm/pull/8418). - When dlx uses cache, use the real directory path not the symlink to the cache [#8421](https://redirect.github.com/pnpm/pnpm/pull/8421). - `pnpm exec` now supports executionEnv [#8356](https://redirect.github.com/pnpm/pnpm/issues/8356). - Remove warnings for non-root `pnpm` field, add warnings for non-root `pnpm` subfields that aren't `executionEnv` [#8143](https://redirect.github.com/pnpm/pnpm/issues/8413). - Replace semver in "peerDependency" with workspace protocol [#8355](https://redirect.github.com/pnpm/pnpm/issues/8355). - Fix a bug in `patch-commit` in which relative path is rejected [#8405](https://redirect.github.com/pnpm/pnpm/pull/8405). - Update Node.js in `@pnpm/exe` to v20. ### [`v9.7.0`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#970) [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.6.0...v9.7.0) ##### Minor Changes - Added pnpm version management to pnpm. If the `manage-package-manager-versions` setting is set to `true`, pnpm will switch to the version specified in the `packageManager` field of `package.json` [#8363](https://redirect.github.com/pnpm/pnpm/pull/8363). This is the same field used by Corepack. Example: ```json { "packageManager": "pnpm@9.3.0" } ``` - Added the ability to apply patch to all versions: If the key of `pnpm.patchedDependencies` is a package name without a version (e.g. `pkg`), pnpm will attempt to apply the patch to all versions of the package. Failures will be skipped. If it is a package name and an exact version (e.g. `pkg@x.y.z`), pnpm will attempt to apply the patch to that exact version only. Failures will cause pnpm to fail. If there's only one version of `pkg` installed, `pnpm patch pkg` and subsequent `pnpm patch-commit $edit_dir` will create an entry named `pkg` in `pnpm.patchedDependencies`. And pnpm will attempt to apply this patch to other versions of `pkg` in the future. If there are multiple versions of `pkg` installed, `pnpm patch pkg` will ask which version to edit and whether to attempt to apply the patch to all. If the user chooses to apply the patch to all, `pnpm patch-commit $edit_dir` would create a `pkg` entry in `pnpm.patchedDependencies`. If the user chooses not to apply the patch to all, `pnpm patch-commit $edit_dir` would create a `pkg@x.y.z` entry in `pnpm.patchedDependencies` with `x.y.z` being the version the user chose to edit. If the user runs `pnpm patch pkg@x.y.z` with `x.y.z` being the exact version of `pkg` that has been installed, `pnpm patch-commit $edit_dir` will always create a `pkg@x.y.z` entry in `pnpm.patchedDependencies`. - Change the default edit dir location when running `pnpm patch` from a temporary directory to `node_modules/.pnpm_patches/pkg[@version]` to allow the code editor to open the edit dir in the same file tree as the main project. - Substitute environment variables in config keys [#6679](https://redirect.github.com/pnpm/pnpm/issues/6679). ##### Patch Changes - `pnpm install` should run `node-gyp rebuild` if the project has a `binding.gyp` file even if the project doesn't have an install script [#8293](https://redirect.github.com/pnpm/pnpm/issues/8293). - Print warnings to stderr [#8342](https://redirect.github.com/pnpm/pnpm/pull/8342). - Peer dependencies of optional peer dependencies should be automatically installed [#8323](https://redirect.github.com/pnpm/pnpm/issues/8323). ### [`v9.6.0`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#960) [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.5.0...v9.6.0) ##### Minor Changes - Support specifying node version (via `pnpm.executionEnv.nodeVersion` in `package.json`) for running lifecycle scripts per each package in a workspace [#6720](https://redirect.github.com/pnpm/pnpm/issues/6720). - Overrides now support the [`catalogs:` protocol](https://pnpm.io/catalogs) [#8303](https://redirect.github.com/pnpm/pnpm/issues/8303). ##### Patch Changes - The `pnpm deploy` command now supports the [`catalog:` protocol](https://pnpm.io/catalogs) [#8298](https://redirect.github.com/pnpm/pnpm/pull/8298). - The `pnpm outdated` command now supports the [`catalog:` protocol](https://pnpm.io/catalogs) [#8304](https://redirect.github.com/pnpm/pnpm/pull/8304). - Correct the error message when trying to run `pnpm patch` without `node_modules/.modules.yaml` [#8257](https://redirect.github.com/pnpm/pnpm/issues/8257). - Silent reporting fixed with the `pnpm exec` command [#7608](https://redirect.github.com/pnpm/pnpm/issues/7608). - Add registries information to the calculation of dlx cache hash [#8299](https://redirect.github.com/pnpm/pnpm/pull/8299). ### [`v9.5.0`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#950) [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.4.0...v9.5.0) ##### Minor Changes - Added support for [catalogs](https://redirect.github.com/pnpm/rfcs/blob/main/text/0001-catalogs.md) [8122](#https://redirect.github.com/pnpm/pnpm/pull/8122). Catalogs may be declared in the `pnpm-workspace.yaml` file. For example: ```yaml ``` ### [`v9.4.0`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#940) [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.3.0...v9.4.0) ##### Minor Changes - Some registries allow the exact same content to be published under different package names and/or versions. This breaks the validity checks of packages in the store. To avoid errors when verifying the names and versions of such packages in the store, you may now set the `strict-store-pkg-content-check` setting to `false` [#4724](https://redirect.github.com/pnpm/pnpm/issues/4724). ##### Patch Changes - Fix `package-manager-strict-version` missing in config [#8195](https://redirect.github.com/pnpm/pnpm/issues/8195). - If install is performed on a subset of workspace projects, always create an up-to-date lockfile first. So, a partial install can be performed only on a fully resolved (non-partial) lockfile [#8165](https://redirect.github.com/pnpm/pnpm/issues/8165). - Handle workspace protocol with any semver range specifier, when used in peer dependencies [#7578](https://redirect.github.com/pnpm/pnpm/issues/7578). ### [`v9.3.0`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#930) [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.2.0...v9.3.0) ##### Minor Changes - **Semi-breaking.** Dependency key names in the lockfile are shortened if they are longer than 1000 characters. We don't expect this change to affect many users. Affected users most probably can't run install successfully at the moment. This change is required to fix some edge cases in which installation fails with an out-of-memory error or "Invalid string length (RangeError: Invalid string length)" error. The max allowed length of the dependency key can be controlled with the `peers-suffix-max-length` setting [#8177](https://redirect.github.com/pnpm/pnpm/pull/8177). ##### Patch Changes - Set `reporter-hide-prefix` to `true` by default for `pnpm exec`. In order to show prefix, the user now has to explicitly set `reporter-hide-prefix=false` [#8174](https://redirect.github.com/pnpm/pnpm/issues/8174). ### [`v9.2.0`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#920) [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.1.4...v9.2.0) ##### Minor Changes - If `package-manager-strict-version` is set to `true`, pnpm will fail if its version doesn't exactly match the version in the "packageManager" field of `package.json`. ##### Patch Changes - Update `@yarnpkg/pnp` to the latest version, fixing issue with `node:` imports [#8161](https://redirect.github.com/pnpm/pnpm/issues/8161). - Deduplicate bin names to prevent race condition and corrupted bin scripts [#7833](https://redirect.github.com/pnpm/pnpm/issues/7833). - pnpm doesn't fail if its version doesn't match the one specified in the "packageManager" field of `package.json` [#8087](https://redirect.github.com/pnpm/pnpm/issues/8087). - `exec` now also streams prefixed output when `--recursive` or `--parallel` is specified just as `run` does [#8065](https://redirect.github.com/pnpm/pnpm/issues/8065). ### [`v9.1.4`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#914) [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.1.3...v9.1.4) ##### Patch Changes - Improved the performance of the resolution stage by changing how missing peer dependencies are detected [#8144](https://redirect.github.com/pnpm/pnpm/pull/8144). ### [`v9.1.3`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#913) [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.1.2...v9.1.3) ##### Patch Changes - Fix a bug in which a dependency that is both optional for one package but non-optional for another is omitted when `optional=false` [#8066](https://redirect.github.com/pnpm/pnpm/issues/8066). - Clear resolution cache before starting peer dependencies resolution [#8109](https://redirect.github.com/pnpm/pnpm/pull/8109). - Reduce memory usage by peer dependencies resolution [#8072](https://redirect.github.com/pnpm/pnpm/issues/8072). ### [`v9.1.2`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#912) [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.1.1...v9.1.2) ##### Patch Changes - Reduced memory usage during peer dependencies resolution [#8084](https://redirect.github.com/pnpm/pnpm/pull/8084). - Details in the `pnpm licenses` output are not misplaced anymore [#8071](https://redirect.github.com/pnpm/pnpm/pull/8071). ### [`v9.1.1`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#911) [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.1.0...v9.1.1) ##### Patch Changes - Improve the performance of the peers resolution stage by utilizing more cache [#8058](https://redirect.github.com/pnpm/pnpm/pull/8058). - Overrides with `link:` now preserve absolute path [#8053](https://redirect.github.com/pnpm/pnpm/issues/8053). - Fix incorrect path when resolving relative `file:` overrides for workspace package [#8053](https://redirect.github.com/pnpm/pnpm/issues/8053). - Print a better error message when `resolution-mode` is set to `time-based` and the registry fails to return the `"time"` field in the package's metadata. - Fix shell completion on MinGW-w64 environment. ### [`v9.1.0`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#910) [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.0.6...v9.1.0) ##### Minor Changes - New setting called `virtual-store-dir-max-length` added to modify the maximum allowed length of the directories inside `node_modules/.pnpm`. The default length is set to 120 characters. This setting is particularly useful on Windows, where there is a limit to the maximum length of a file path [#7355](https://redirect.github.com/pnpm/pnpm/issues/7355). ##### Patch Changes - A dependency is hoisted to resolve an optional peer dependency only if it satisfies the range provided for the optional peer dependency [#8028](https://redirect.github.com/pnpm/pnpm/pull/8028). - Details in the `pnpm outdated` output are wrapped correctly [#8037](https://redirect.github.com/pnpm/pnpm/pull/8037). - Fix `Cannot read properties of undefined (reading 'missingPeersOfChildren')` exception that happens on install [#8041](https://redirect.github.com/pnpm/pnpm/issues/8041). - Explicitly throw an error when user attempts to run `publish` or `pack` when `bundledDependencies` is set but `node-linker` isn't `hoisted`. - `pnpm update` should not fail when there's an aliased local workspace dependency [#7975](https://redirect.github.com/pnpm/pnpm/issues/7975). ### [`v9.0.6`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#906) [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.0.5...v9.0.6) ##### Patch Changes - Lockfiles that have git-hosted dependencies specified should be correctly converted to the new lockfile format [#7990](https://redirect.github.com/pnpm/pnpm/issues/7990). - Don't upgrade the lockfile format on `pnpm install --frozen-lockfile` [#7991](https://redirect.github.com/pnpm/pnpm/issues/7991). ### [`v9.0.5`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#905) [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.0.4...v9.0.5) ##### Patch Changes - Lockfiles with local or git-hosted dependencies are now successfully converted to the new lockfile format [#7955](https://redirect.github.com/pnpm/pnpm/issues/7955). - Resolve peer dependencies correctly, when they have prerelease versions [#7977](https://redirect.github.com/pnpm/pnpm/issues/7977). - Fix aliased dependencies resolution on repeat install with existing lockfile, when the aliased dependency doesn't specify a version or range [#7957](https://redirect.github.com/pnpm/pnpm/issues/7957). - The lockfile should be saved in the new format even if it is up-to-date. ### [`v9.0.4`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#904) [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.0.3...v9.0.4) ##### Patch Changes - Fix aliased dependencies resolution on repeat install with existing lockfile [#7957](https://redirect.github.com/pnpm/pnpm/issues/7957). - The `engines.pnpm` field in the `package.json` files of dependencies should be ignored [#7965](https://redirect.github.com/pnpm/pnpm/issues/7965). ### [`v9.0.3`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#903) [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.0.2...v9.0.3) ##### Patch Changes - If the `script-shell` option is configured to a `.bat`/`.cmd` file on Windows, pnpm will now error with `ERR_PNPM_INVALID_SCRIPT_SHELL_WINDOWS`. Newer [versions of Node.js released in April 2024](https://nodejs.org/en/blog/vulnerability/april-2024-security-releases-2) do not support executing these files directly without behavior differences. If the `script-shell` option is necessary for your use-case, please set a `.exe` file instead. - Print a hint about the `package-manager-strict` setting, when pnpm doesn't match the version specified in the `packageManager` field in `package.json`. - `pnpm completion` command should work in the standalone version of pnpm [#7948](https://redirect.github.com/pnpm/pnpm/issues/7948). ### [`v9.0.2`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#902) [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.0.1...v9.0.2) ##### Patch Changes - Fixed an issue where optional dependencies were not linked into the dependent's `node_modules` [#7943](https://redirect.github.com/pnpm/pnpm/issues/7943). ### [`v9.0.1`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#901) [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v9.0.0...v9.0.1) ##### Patch Changes - `pnpm install --frozen-lockfile` should work with lockfiles generated by pnpm v8, if they don't need updates [#7934](https://redirect.github.com/pnpm/pnpm/issues/7934). ### [`v9.0.0`](https://redirect.github.com/pnpm/pnpm/blob/HEAD/pnpm/CHANGELOG.md#900) [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v8.15.9...v9.0.0) ##### Major Changes - Node.js v16 support discontinued If you still require Node.js 16, don't worry. We ship pnpm bundled with Node.js. This means that regardless of which Node.js version you've installed, pnpm will operate using the necessary Node.js runtime. For this to work you need to install pnpm either using the [standalone script](https://pnpm.io/installation#using-a-standalone-script) or install the `@pnpm/exe` package. - Configuration updates: - [`dedupe-injected-deps`](https://pnpm.io/npmrc#dedupe-injected-deps): enabled by default. - [`link-workspace-packages`](https://pnpm.io/npmrc#link-workspace-packages): disabled by default. This means that by default, dependencies will be linked from workspace packages only when they are specified using the [workspace protocol](https://pnpm.io/workspaces#workspace-protocol-workspace). - [`hoist-workspace-packages`](https://pnpm.io/npmrc#hoist-workspace-packages): enabled by default. - [`enable-pre-post-scripts`](https://pnpm.io/cli/run#enable-pre-post-scripts): enabled by default. - Use the same directory for state files on macOS as on Linux (`~/.local/state/pnpm`). - pnpm will now check the `package.json` file for a `packageManager` field. If this field is present and specifies a different package manager or a different version of pnpm than the one you're currently using, pnpm will not proceed. This ensures that you're always using the correct package manager and version that the project requires. - Lockfile changes: - Lockfile v9 is adopted. This new format has changes for better readability, and better resistence to Git conflicts. - Support for lockfile v5 is dropped. Use pnpm v8 to convert lockfile v5 to lockfile v6 [#7470](https://redirect.github.com/pnpm/pnpm/pull/7470). - Dependency resolution changes: - Correct resolution of peer dependencies that have their own peer dependencies. Related issue: [#7444](https://redirect.github.com/pnpm/pnpm/issues/7444). Related PR: [#7606](https://redirect.github.com/pnpm/pnpm/pull/7606). - Optional peer dependencies may be resolved from any packages in the dependency graph [#7830](https://redirect.github.com/pnpm/pnpm/pull/7830). - `pnpm licenses list` prints license information of all versions of the same package in case different versions use different licenses. The format of the `pnpm licenses list --json` output has been changed [#7528](https://redirect.github.com/pnpm/pnpm/pull/7528). - A new command added for printing completion code to the console: `pnpm completion [shell]`. The old command that modified the user's shell dotfiles has been removed [#3083](https://redirect.github.com/pnpm/pnpm/issues/3083). - When installing git-hosted dependencies, only pick the files that would be packed with the package [#7638](https://redirect.github.com/pnpm/pnpm/pull/7638). ##### Minor Changes - It is now possible to install only a subdirectory from a Git repository. For example, `pnpm add github:user/repo#path:packages/foo` will add a dependency from the `packages/foo` subdirectory. This new parameter may be combined with other supported parameters separated by `&`. For instance, the next command will install the same package from the `dev` branch: `pnpm add github:user/repo#dev&path:packages/bar`. Related issue: [#4765](https://redirect.github.com/pnpm/pnpm/issues/4765). Related PR: [#7487](https://redirect.github.com/pnpm/pnpm/pull/7487). - `node-gyp` updated to version 10. - PowerShell completion support added [#7597](https://redirect.github.com/pnpm/pnpm/pull/7597). - Support `node-options` option inside `.npmrc` file when running scripts [#7596](https://redirect.github.com/pnpm/pnpm/issues/7596). - Added support for registry-scoped SSL configurations (cert, key, and ca). Three new settings supported: `