pnpm 发布 v7.0.0

2633

前言

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会有一个总是存在的预发布版本。如果foonext版本为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…