pnpm v10 来了!这些更新你一定不能错过

开发 前端
在包管理工具的赛道上,pnpm 一直是开发者眼中的 “性能之选”。它通过独特的硬链接机制和优秀的性能表现,成功的在包管理工具上占据了一席之地。而就在最近,pnpm v10 正式发布,这次发布包含了众多重大更新和功能改进,尤其是对安全性和性能的提升!

Hello,大家好,我是 Sunday。

在包管理工具的赛道上,pnpm 一直是开发者眼中的 “性能之选”。它通过独特的硬链接机制和优秀的性能表现,成功的在包管理工具上占据了一席之地。

而就在最近,pnpm v10 正式发布,这次发布包含了众多重大更新和功能改进,尤其是对安全性和性能的提升!

今天,咱们就一起来看看 v10 带来了哪些变化,以及这些变化将如何影响我们的日常开发。

核心变化一览

1. 默认禁用依赖生命周期脚本

pnpm v10 默认不再执行依赖的生命周期脚本(如 postinstall 和 preinstall)。这是一个显著的安全增强,可以有效防止恶意脚本在安装依赖时被执行。

如果需要允许某些特定依赖执行生命周期脚本,可以在 package.json 中通过 pnpm.onlyBuiltDependencies 字段进行显式配置。例如:

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

2. 改进的 pnpm link

pnpm link 的行为在 v10 中进行了优化:

  • 工作区中:pnpm link 现在会将链接信息添加到工作区的根级 package.json,从而让所有项目都能共享相同的链接。
  • 全局链接:想要全局链接一个包,只需在包的目录下运行 pnpm link,不再需要额外指定 -g 参数。

3. 安全性升级:全面切换到 SHA256 哈希算法

pnpm v10 将多个关键部分的哈希算法更新为 SHA256,以提升安全性和一致性:

  • node_modules/.pnpm 中长路径的哈希。
  • 锁定文件中的长依赖项哈希。
  • pnpm-lock.yaml 文件的多项校验值(如 packageExtensionsChecksum 和 sideEffects)。
  • 侧效缓存(Side Effects Cache)的校验值。

4. 配置管理更加智能

pnpm v10 对配置的管理也进行了优化:

  • manage-package-manager-versions 默认启用:pnpm 会根据 package.json 中的 packageManager 字段自动管理版本。
  • 公共提升(public hoisting)模式更新:默认情况下,不再提升任何包到 node_modules 根目录。这对依赖冲突的处理更加友好。
  • 减少脚本执行中的环境变量:仅保留必要的环境变量(如 npm_package_name 和 npm_package_version),减少了不必要的污染。

5. 更智能的依赖安装

pnpm v10 对依赖安装的逻辑进行了多处优化:

  • 即使 NODE_ENV=production,也会安装所有依赖。这解决了一些生产环境下依赖缺失的问题。
  • 更快的重复安装:在重复执行安装命令时,pnpm 会快速校验 node_modules 是否已经是最新状态,无需重新生成。
  • 增强的依赖验证:新增 verify-deps-before-run 设置,可控制在运行脚本前对依赖的检查策略(如自动安装、警告或抛出错误)。

6. 全球存储与索引优化

pnpm v10 对全局存储和依赖索引进行了优化:

  • 存储版本升级到 v10:支持同一内容的不同包名或版本共享索引文件,从而提升一致性。
  • 更高效的副作用缓存索引:仅记录文件差异,而非所有文件,节省了存储空间。
  • 更可靠的依赖校验:通过存储内容哈希和包标识符,确保锁定文件中的完整性与一致性。

7. 新增支持:配置依赖(Configurational Dependencies)

pnpm v10 引入了一种新的依赖类型 配置依赖(configurational dependencies),这些依赖会在其他依赖之前优先安装。

配置依赖无法拥有自己的依赖或生命周期脚本,必须使用确切的版本号和校验值进行安装,例如:

{
  "pnpm": {
    "configDependencies": {
      "my-configs": "1.0.0+sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="
    }
  }
}

责任编辑:武晓燕 来源: 程序员Sunday
相关推荐

2023-11-12 22:43:53

系统镜像

2020-08-18 11:21:28

数据挖掘机器学习算法

2019-05-28 11:00:17

微软Windows 105月更新

2018-03-08 10:05:10

2022-01-19 12:15:28

元宇宙开源

2019-11-12 08:53:00

线上命令日志

2015-10-28 14:40:44

LG

2022-11-16 11:55:22

网络连接命令

2018-03-09 10:34:48

显卡参数超频

2021-02-26 09:04:22

数组ArrayListHashMap

2022-05-02 09:21:25

微信微信支付

2019-04-24 16:40:18

Redis数据库

2014-12-17 14:21:56

Hybrid App框架工具

2015-10-28 15:15:29

LG

2020-04-27 10:34:23

HTTPDNSDNS网络协议

2021-05-20 14:50:03

加密货币比特币数据

2020-09-16 18:44:34

JavaScript书籍开发者

2022-12-26 09:16:45

Guava架构模型

2017-01-19 17:57:47

大数据

2014-10-29 14:52:13

程序员
点赞
收藏

51CTO技术栈公众号