Dreamer Dreamer
首页
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)

lycpan233

白日梦想家
首页
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)
  • Mysql

  • Node

    • npm为什么父项目指定依赖版本后,可以影响到子项目的依赖
    • MacOS pnmp多个项目同个包,为什么没有共享存储空间?
    • pnpm 使用指南
      • 背景
      • 安装方式
      • FAQ
        • pnpm 缩减了多少空间?
      • 相关链接
        • 引用链接
        • 好文推荐
    • pnpm 下载依赖更换源不生效
    • Commitizen + Commitlint + husky 实践
    • package.json 中波浪号~ 异或号^ 是什么意思?
  • Go

  • Docker

  • 后端
  • Node
lycpan233
2024-01-10
目录

pnpm 使用指南

# 背景

官网文档给出了 pnpm 的三大优势[1]:

  1. 节省磁盘空间。
  2. 提高安装速度。
  3. 创建一个非扁平的 node_modules 目录

这里不对第三点展开讨论,主要是看中 pnpm 的第一、二点特性。在实际开发中,经常存在多个 Node 项目需要复用依赖的情况,npm 一直没有给出优雅的解决方式。空间的浪费,对于丐版的 MAC 就有些捉襟见肘了。另一痛点是npm 的下载速度感人,经常出去兜个圈,它还在下载中。

pnpm 给出的解决方案是通过软链接与硬链接[2]的方式将不同项目的同个文件串联起来,从而能够提高效率。相较于 yarn 有巨大提升,如果 yarn 对比 npm 是 minor 级别的提升,那 pnpm 的特性,算得上 major 级别的更新了[3]。

# 安装方式

  1. 安装 pnpm

这里借助了 brew, 官网提供了多样的安装模式。(pnpm 提供了管理 Node 版本的能力,有兴趣的小伙伴,可以不借助 npm,独立安装 pnpm )

brew install pnpm
1
  1. 设置命令自动补全

若不喜欢 tab 补全可以跳过这一步

指定 shell 安装补全命令,成功后重启 shell

# 输入该命令后选择对应的 shell
pnpm install-completion

# 或者 追加 shell 为参数
pnpm install-completion zsh
1
2
3
4
5
  1. 配置 .npmrc 在 MAC OS 下,默认不会采用硬链接的方式进行文件安装[5],所以需要指定安装模式。 在 .npmrc 中,追加配置 package-import-method [6]
# .npmrc
package-import-method=hardlink
1
2

# FAQ

# pnpm 缩减了多少空间?

单一项目: Course (467.7 MB) => Course(400.0 MB)
多项目: Project (12GB) => Project (4.9G) 磁盘可用空间: HD(97.51) => HD(120.34) Tips:(这里测量有误差,因为后续有对磁盘存储优化,可以自己测量一下)

当某个包在项目里取消依赖了,全局的包怎么释放? 这里分为两种情况讨论:

  1. 仅有当前项目引用该包。
  2. 删除本地包pnpm remove
  3. 删除 .pnpm 中的包 pnpm prune
  4. 删除仓库中未引用的包 pnpm store prune [7]。
  5. 有多个项目引用该包。 上述命令不会影响该包,若是手动删除引用,也不会影响到其它项目的引用(硬链接概念)。

# 相关链接

吐槽一句 , pnpm 的 中文文档很友好,对比 npm 好多了。

# 引用链接

  1. 项目初衷 | pnpm (opens new window)
  2. Linux 硬链接与软链接 (opens new window)
  3. Why should we use pnpm (opens new window)
  4. 安装 | pnpm (opens new window)
  5. Running out of disk space on macos (opens new window)
  6. package-import-method | pnpm (opens new window)
  7. pnpm store | pnpm (opens new window)

# 好文推荐

pnpm store的文件保存结构 - 掘金 (juejin.cn) (opens new window)

Base64 to Hex | Base64 Decode | Base64 Converter | Base64 (opens new window)

新一代包管理工具 pnpm 使用心得 - 知乎 (zhihu.com) (opens new window)

pnpm always links to local /node_modules/.registry.npmjs.org/ folder; ignores store-path config · Issue #794 · pnpm/pnpm (github.com) (opens new window)

编辑 (opens new window)
上次更新: 2025/04/15, 03:48:14
MacOS pnmp多个项目同个包,为什么没有共享存储空间?
pnpm 下载依赖更换源不生效

← MacOS pnmp多个项目同个包,为什么没有共享存储空间? pnpm 下载依赖更换源不生效→

最近更新
01
docker基础概念
02-26
02
js 获取变量准确类型
02-19
03
Mysql SQL 优化思路
02-18
更多文章>
Theme by Vdoing | Copyright © 2023-2025 Dreamer | MIT License
粤ICP备2025379918号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式