Major Changes
-
Node.js 12 is not supported.
-
The root package is excluded by default, when running
pnpm -r exec|run|add
#2769. -
Filtering by path is done by globs.
In pnpm v6, in order to pick packages under a certain directory, the following filter was used:
--filter=./apps
In pnpm v7, a glob should be used:
--filter=./apps/**
For easier upgrade, we have also added a setting to turn back filtering as it was in v6. Just set
legacy-dir-filtering=true
in.npmrc
. -
The
NODE_PATH
env variable is not set in the command shims (the files innode_modules/.bin
). This env variable was really long and frequently caused errors on Windows.Also, the
extend-node-path
setting is removed.Related PR: #4253
-
The
embed-readme
setting isfalse
by default. -
When using
pnpm run <script>
, all command line arguments after the script name are now passed to the script's argv, even--
. For example,pnpm run echo --hello -- world
will now pass--hello -- world
to theecho
script's argv. Previously flagged arguments (e.g.--silent
) were interpreted as pnpm arguments unless--
came before it.Related PR: #4290
-
Side effects cache is turned on by default. To turn it off, use
side-effects-cache=false
. -
The
npm_config_argv
env variable is not set for scripts #4153. -
pnpx
is now just an alias ofpnpm dlx
.If you want to just execute the command of a dependency, run
pnpm <cmd>
. For instance,pnpm eslint
.If you want to install and execute, use
pnpm dlx <pkg name>
. -
pnpm install -g pkg
will add the global command only to a predefined location. pnpm will not try to add a bin to the global Node.js or npm folder. To set the global bin directory, either set thePNPM_HOME
env variable or theglobal-bin-dir
setting. -
pnpm pack
should only pack a file as an executable if it's a bin or listed in thepublishConfig.executableFiles
array. -
-W
is not an alias of--ignore-workspace-root-check
anymore. Just use-w
or--workspace-root
instead, which will also allow to install dependencies in the root of the workspace. -
Allow to execute a lifecycle script in a directory that doesn't match the package's name. Previously this was only allowed with the
--unsafe-perm
CLI option #3709. -
Local dependencies referenced through the
file:
protocol are hard linked (not symlinked) #4408. If you need to symlink a dependency, use thelink:
protocol instead. -
strict-peer-dependencies
istrue
by default #4427. -
A prerelease version is always added as an exact version to
package.json
. If thenext
version offoo
is1.0.0-beta.1
then runningpnpm add foo@next
will add this topackage.json
:{ "dependencies": { "foo": "1.0.0-beta.1" } }
PR: #4435
-
Dependencies of the root workspace project are not used to resolve peer dependencies of other workspace projects #4469.
-
Don't hoist types by default to the root of
node_modules
#4459. -
Any package with "prettier" in its name is hoisted.
-
Changed the location of the global store from
~/.pnpm-store
to<pnpm home directory>/store
On Linux, by default it will be
~/.local/share/pnpm/store
On Windows:%LOCALAPPDATA%/pnpm/store
On macOS:~/Library/pnpm/store
Related issue: #2574
-
4bed585: The next deprecated settings were removed:
- frozen-shrinkwrap
- prefer-frozen-shrinkwrap
- shared-workspace-shrinkwrap
- shrinkwrap-directory
- lockfile-directory
- shrinkwrap-only
- store
-
Use a base32 hash instead of a hex to encode too long dependency paths inside
node_modules/.pnpm
#4552. -
New setting added:
git-shallow-hosts
. When cloning repositories from "shallow-hosts", pnpm will use shallow cloning to fetch only the needed commit, not all the history #4548. -
Lockfile version bumped to v5.4.
-
Exit with an error when running
pnpm install
in a directory that has nopackage.json
file in it (and in parent directories) #4609.
Our Sponsors
What's Changed
- feat!: breaking config changes for v7 by @zkochan in #4253
- feat(pack)!: limit what files are packed as executables by @zkochan in #4266
- feat!: pnpx is an alias of pnpm dlx by @zkochan in #4267
- feat: run scripts without -- by @gluxon in #4290
- fix: revert backwards compatible handling of -- for run by @gluxon in #4291
- feat!: global bins should be created only in predefined locations by @zkochan in #4280
- ci: use pnpm v7 by @zkochan in #4307
- feat!: remove -W option by @zkochan in #4308
- test(audit): fix for 2022-02-15 by @gluxon in #4340
- feat: -F is a short alias of --filter by @zkochan in #4342
- feat: onlyBuiltDependencies by @zkochan in #4014
- fix(make-dedicated-lockfile): don't re-resolve dependency versions in dedicated lockfile by @David-Collins in #4350
- test(audit): mock responses from audit endpoint by @zkochan in #4354
- fix: bad packageManager field by @Jack-Works in #4356
- feat: use the versions from overrides when adding deps without specs by @zkochan in #4355
- chore: document the interface of command packages by @illright in #3828
- fix: print an info message when NODE_ENV is set to production by @zkochan in #4362
- test: ignore override if a version is specified at install by @nikoladev in #4366
- fix: ignore case, when verifying package name in the store by @zkochan in #4368
- fix: peerDependencyRules with * as range by @zkochan in #4370
- feat: run scripts without --unsafe-perm by @zkochan in #4369
- chore(github): add welcome bot app by @BlackHole1 in #4373
- fix: onlyBuiltDependencies should work by @zkochan in #4377
- fix: pnpm i should work on virtual drives by @kazuare in #4386
- fix: throw a meaningful error message on broken lockfile by @zkochan in #4387
- fix: don't write data from the lockfile to the global store by @zkochan in #4395
- fix(resolve-dependencies): a sequence of injected deps via the file protocol by @zkochan in #4415
- feat: the file protocol should always inject the dependency by @zkochan in #4408
- feat: add own implementation of the init command by @zkochan in #4422
- feat: strict-peer-dependencies is true by default by @zkochan in #4427
- feat: respect the npmrc by @Spencer17x in #4425
- feat: a prerelease version is always saved as an exact version by @zkochan in #4435
- feat: prevent deep imports using exports by @zkochan in #4440
- fix: use
@pnpm/graph-sequencer
instead ofgraph-sequencer
by @zkochan in #4458 - fix: fetch should allow the same options as install by @zkochan in #4460
- fix: typo by @HomyeeKing in #4462
- fix(lockfile-utils): checking dependenciesMeta by @zkochan in #4463
- fix: types should not be hoisted to the root of node_modules by @zkochan in #4459
- chore: replace deprecated String.prototype.substr() by @CommanderRoot in #4479
- Chore/friendly git error by @lawvs in #4488
- fix: handle undefined version spec by @tmkx in #4487
- lint: remove duplicate code by @milahu in #4496
- fix: typo by @HomyeeKing in #4499
- feat: don't resolve peer dependencies from workspace root by @zkochan in #4469
- chore: fix typo by @sudongyuer in #4516
- fix: set root by @HomyeeKing in #4515
- fix(cmd-shim): extend NODE_PATH with path to hidden hoisted dir by @zkochan in #4513
- chore: public-hoist-pattern prettier config by @fupengl in #3954
- feat: remove deprecated settings by @zkochan in #4519
- feat: the global store location should be inside the pnpm home directory by @zkochan in #4522
- fix: the file protocol should link all files by default by @zkochan in #4532
- fix: dependenciesMeta should be saved into the lockfile by @zkochan in #4538
- fix: resolve peers from linked in dependencies by @zkochan in #4541
- fix: peer dependency has workspace protocol by @zkochan in #4540
- feat: use a shorter hash for dep path by @zkochan in #4552
- feat(git-fetcher): shallow clone when fetching git resource by @kenrick95 in #4548
- style(*): remove duplicate declarations in TypeScript types by @dev-itsheng in #4570
- docs(*): fix problems with sample code in documentation by @dev-itsheng in #4572
- fix(exe): use the strict equality operator, and make
JSON.parse
execute correctly by @dev-itsheng in #4571 - Improve spnpm to use esbuild by @jondlm in #4574
- style(*): typo by @dev-itsheng in #4573
- fix(core): prevent duplication of peerDependencyRules in the lockfile by @kamsar in #4576
- fix: store integrity check when the lockfile is updated by @zkochan in #4580
- Fix
add
bug with overlapping workspace packages by @jondlm in #4575 - fix(exec): commands of workspace project should be in PATH by @zkochan in #4583
- fix(default-reporter): use loglevel to filter deprecation warnings (#4343) by @milahu in #4507
- fix: an edge case with peer resolutions and circular deps by @zkochan in #4588
- feat: shrink path to the global directory (to reduce chance of too long names on Windows) by @zkochan in #4591
- fix(filter-workspace-packages): filter not working if the path contains Korean characters by @WhiteKiwi in #4595
- chore: Set permissions for GitHub actions by @neilnaveen in #4607
- fix: only
pnpm install
should fail on peer dep issues by @zkochan in #4596 - feat: add legacy-dir-filtering by @zkochan in #4610
- fix(init): don't fail if a parent dir has a package.json by @zkochan in #4615
- fix: dlx should work without a configured global directory by @zkochan in #4612
- fix(install): exit with an error when no package.json is found by @zkochan in #4614
- fix: a file dep has a file dep by @zkochan in #4618
- fix: publish in workspace by @zkochan in #4627
- fix: don't fail when moving packages to node_modules/.ignored by @zkochan in #4626
- fix: global linking by @zkochan in #4641
- fix(exportable-manifest, types): add typesVersions field to PUBLISH_CONFIG_WHITELIST by @WhiteKiwi in #4637
New Contributors
- @Jack-Works made their first contribution in #4356
- @kazuare made their first contribution in #4386
- @Spencer17x made their first contribution in #4425
- @HomyeeKing made their first contribution in #4462
- @CommanderRoot made their first contribution in #4479
- @lawvs made their first contribution in #4488
- @tmkx made their first contribution in #4487
- @sudongyuer made their first contribution in #4516
- @fupengl made their first contribution in #3954
- @dev-itsheng made their first contribution in #4570
- @jondlm made their first contribution in #4574
- @kamsar made their first contribution in #4576
- @WhiteKiwi made their first contribution in #4595
- @neilnaveen made their first contribution in #4607
Full Changelog: v6.31.0...v7.0.0