一文详解pnpm v10 更新

444 阅读3分钟

前言

在前端开发领域,包管理工具是必不可少的,它们极大地提高了开发效率,简化了依赖管理。pnpm 作为一款备受开发者青睐的包管理器,2025年01月08日迎来了重大更新 —— pnpm v10 正式发布。本次更新历时 3 个月,历经 12 个版本迭代,终于与大家正式见面。接下来,让我们一同深入了解 pnpm v10 的核心亮点。

依赖项生命周期脚本不再自动执行

pnpm v10 中,依赖包的生命周期脚本(如 preinstall、install、postinstall 等)在安装期间将不再自动执行。这一变更旨在提升安全性,避免潜在的恶意脚本在安装时自动运行。

如果项目中确实需要某些依赖包的脚本自动执行,可以通过在 pnpm 配置文件中手动指定允许执行脚本的包列表来实现。例如:

{
  "pnpm": {
    "onlyBuiltDependencies": ["fsevents"]
  }
}

pnpm link 行为更新

pnpm link 的行为也得到了优化。现在,通过 pnpm link 默认创建的是全局包,无需再添加 -g 标志。此外,在 workspace 的多包项目中,依赖项可通过 override 被链接到工作区中的所有项目,扩大了影响范围,提升了开发效率。

使用 SHA256 进行安全哈希处理

pnpm v10 采用 SHA256 算法对各种哈希进行处理,包括 node_modules/.pnpm 内的长路径、锁定文件中的长对等依赖关系哈希、pnpm-lock.yaml 的 packageExtensionsChecksum 字段等。这一改进增强了安全性和一致性,降低了数据被篡改的风险。

配置更新

  • • manage-package-manager-versions:默认启用,pnpm 会根据 package.json 中的 packageManager 字段管理自身版本。
  • • public-hoist-pattern:默认不再提升任何内容,名称中包含 eslint 或 prettier 的包也不会自动提升到 node_modules 根目录。
  • • 其他配置更新:@yarnpkg/extensions 升级至 v2.0.3;Windows 上的 virtual-store-dir-max-length 默认值减少到 60 个字符;减少脚本的环境变量,仅保留 name、version、bin、engines 和 config 等关键字段;即使 NODE_ENV=production,也会安装所有依赖项,包括开发依赖。

全局存储更新

全局 store 升级到 v10,索引文件结构发生变化,通过仅列出文件差异而不是所有文件,更高效地跟踪副作用。新的索引目录存储了包内容映射,允许相同内容被不同包或同一包的不同版本引用。

次要变化

  • • 新增配置依赖项类型:支持一种名为 configurational dependencies 的新依赖项类型,它在所有其他类型的依赖项之前安装,且不能有自身的依赖项或生命周期脚本。
  • • 新的 verify-deps-before-run 设置:控制 pnpm 在运行脚本前如何检查 node_modules,提供 install、warn、prompt、error 和 false 等多种值选项。
  • • 更快的重复安装:重复安装时,pnpm 会快速检查 node_modules 是否最新,提高安装效率。
  • • pnpm add 与默认工作区目录集成:添加依赖项时,pnpm add 会检查默认工作区目录,若匹配则使用 catalog: 协议,否则恢复标准行为。
  • • pnpm dlx 解析调整:pnpm dlx 现将软件包解析为其确切版本,并用作缓存键,确保始终安装最新请求的软件包。
  • • node_modules 验证优化:部分命令不再进行 node_modules 验证,避免不必要的修改和验证步骤。

以上是 pnpm v10 的主要更新内容,这些改进不仅提升了安全性、一致性和性能,还为开发者提供了更灵活的配置和管理方式。pnpm 团队的辛勤工作和精心打磨无疑将为前端开发领域带来更大的便利和更高的效率,值得广大开发者关注和尝试。