前言
pnpm是一个快速、节省磁盘空间的包管理器,近期发布了v7.0.0版本重大更新。
主要变化
-
不再支持
Node.js 12 -
当使用
pnpm run <script>,所有的命令行参数都会传递给脚本(包括--)。例如,pnpm run echo --hello -- world会把--hello -- world传递给echo脚本作为参数。之前,如果不添加--,标记型参数(例如--silent)都会当成pnpm的参数。 -
pnpm -r exec|run|add命令运行时默认排除根包 -
使用
globs语法来进行filter操作 -
- 在
pnpm 6,为了选取特定目录的包,命令是--filter=./apps - 在
pnpm 7,应该改为:--filter=./apps/** - 选择支持
pnpm 6风格时候,在.npmrc里设置legacy-dir-filtering=true
- 在
-
默认的命令
shims不再包含 NODE_PATH env 变量。这个变量经常在windows导致问题。- 去除了
extend-node-path设定 - 相关 pr
- 去除了
-
embed-readme默认改为false -
默认开启副作用缓存,关闭需要设置
side-effects-cache=false -
默认不在添加
npm_config_argv环境变量 -
pnpx现在只是pnpm dlx的别名- 如果你只是想执行一个依赖的命令,执行
pnpm <cmd>,例如pnpm eslint - 如果你想安装且执行,使用
pnpm dlx <pkg name>
- 如果你只是想执行一个依赖的命令,执行
-
pnpm install -g pkg会在预先设定的地址安装全局命令。pnpm不会在全局的Node.js或者npm的文件夹执行安装命令。设置全局命令文件夹,要么设置PNPM_HOME环境变量或者global-bin-dir设置。 -
pnpm pack只会把bin或者列在publishConfig.executableFiles里的文件打包成可执行文件。 -
-W不再是--ignore-workspace-root-check的别名。使用-w或者--workspace-root来代替这个参数。使用-w会允许在根工作目录安装依赖 -
允许在一个文件夹执行不匹配包名的生命周期脚本。之前需要设置
--unsafe-perm才可以执行。 -
本地依赖有
file: 协议的使用硬连接(不是符号链接)。如果你需要符号链接一个依赖,使用link:协议。 -
默认
strict-peer-dependencies设置为true。 -
package.json会有一个总是存在的预发布版本。如果foo的next版本为1.0.0-beta.1,执行pnpm add foo@next会给 package.json 增加。{ "dependencies": { "foo": "1.0.0-beta.1" } } -
根目录项目的依赖不会解析其他工作空间项目的
peer依赖。 -
默认不再提升
types到根node_modules。 -
提升
prettier的规则,改为任意包含prettier的名字都提升到根工作目录。 -
全局
store的文件夹从~/.pnpm-store改为<pnpm home directory>/store -
- 在
Linux,默认是~/.local/share/pnpm/store - 在
Windows,默认是%LOCALAPPDATA%/pnpm/store - 在
macOS,默认是~/Library/pnpm/store
- 在
-
去除废弃设定
- frozen-shrinkwrap
- prefer-frozen-shrinkwrap
- shared-workspace-shrinkwrap
- shrinkwrap-directory
- lockfile-directory
- shrinkwrap-only
- store
-
node_modules/.pnpm中过于长的依赖路径由hex编码改为base32。 -
新增设置
git-shallow-hosts。当从shallow-hosts拷贝仓库时,pnpm会只浅拷贝需要的commit,而不是所有的历史。 -
Lockfile版本升级为v5.4 -
如果一个文件夹(及父文件夹)没有
package.json,执行pnpm install会报错退出。
更多详细信息,更查看:github.com/pnpm/pnpm/r…