Major Changes
-
🚀 33% faster installation times vs pnpm v4.
In some cases, 2 times faster than Yarn v1! (performance diff of pnpm v4 vs v5)
action cache lockfile node_modules npm pnpm Yarn Yarn PnP install 43.3s 17.5s 36.7s 28.6s install ✔ ✔ ✔ 7s 1.5s 735ms n/a install ✔ ✔ 18.3s 7.8s 10.5s 1.8s install ✔ 24.8s 10.9s 22.2s 12.1s install ✔ 23.2s 15.2s 22.4s 13.4s install ✔ ✔ 6.4s 1.8s 17.1s n/a install ✔ ✔ 7.3s 1.5s 735ms n/a install ✔ 6.4s 3.1s 33.2s n/a update n/a n/a n/a 7s 14.5s 42.6s 27.6s All the benchmarks are here.
-
A content-addressable filesystem is used to store packages on the disk.
pnpm v5 uses a content-addressable filesystem to store all files from all module directories on a disk. If you depend on different versions of lodash, only the files that differ are added to the store. If lodash has 100 files, and a new version has a change only in one of those files, pnpm update will only add 1 new file to the storage.
For more info about the structure of this new store, you can check the GitHub issue about it.
This change was inspired by dupe-krill and the content-addressable storage of Git.
-
Reduced directory nesting in the virtual store directory.
In pnpm v4, if you installed
foo@1.0.0
, it was hard-linked intonode_modules/.pnpm/registry.npmjs.org/foo/1.0.0/
.In pnpm v5, it will be hard-linked into
node_modules/.pnpm/foo@1.0.0/
. This new structure of the virtual store directory drastically reduces the number of directories pnpm has to create. Hence, there are fewer filesystem operations, which improves speed. -
pnpm store usages
removed.This command was using information from the
store.json
files, which is not present in the new content-addressable storage anymore. -
The
independent-leaves
setting has been removed.When hoisting was off, it was possible to set the
independent-leaves
setting totrue
. Whentrue
, leaf dependencies were symlinked directly from the global store. However, we turned hoisting on by default for pnpm v4, so this feature has no future at the moment. -
The
resolution-strategy
setting has been removed.By default, the
fewer-dependencies
resolution strategy is used. It was possible to select afast
resolution strategy. This setting is deprecated to simplify future improvements to the resolution algorithm. -
The store and the modules directory are not locked.
We are not using directory locks anymore. So the
--no-lock
option will throw an error. Some users had issues with locking. We have confidence that pnpm will never leave either node_modules or the store in a broken state,
so we removed locking. -
git-checks
istrue
by default.By default,
pnpm publish
will make some checks before actually publishing a new version of your package.The next checks will happen:
- The current branch is your publish branch. The publish branch is
master
by default. This is configurable through thepublish-branch
setting. - Your working directory is clean (there are no uncommitted changes).
- The branch is up-to-date.
If you don't want this checks, run
pnpm publish --no-git-checks
or set this setting tofalse
via a.npmrc
file. - The current branch is your publish branch. The publish branch is
-
In case of a crash, the debug file will be written to
node_modules/.pnpm-debug.log
(not topnpm-debug.log
as in v4 and earlier).
Minor Changes
-
The
link-workspace-packages
setting may now be set todeep
.When
link-workspace-packages
is set todeep
, packages from the workspace will be linked even to subdependencies.