pnpm 一种可以替代npm的包管理器

163 阅读2分钟

一:什么是pnpm(performant npm)

  • 快速:pnpm比其他包管理工具快两倍
  • 高效:node_modules中文件链接自特定的内存寻址存储库
  • 支持monorepos:pnpm内置支持单仓多包
  • 严格:pnpm创建默认的非平铺node_modules,因此代码无法访问任意包

包括vue在内的很多公司和开源项目都切换到了pnpm

二:拷贝、硬链接、软链接的概念

  1. 文件的拷贝

    • 从硬盘复制一份新的文件数据
    • cp file file_copy
  2. 硬链接/hard link

    • 电脑文件系统中的多个文件平等地共享同一个文件存储单元
    • 删除一个文件名字后还可以用其他名字继续访问该文件
    • ln file file_hard
  3. 软连接/soft link 符号链接/symbol link:

    • 符号链接(软链接,symbol link)是一类特殊的文件
    • 其包含一条以绝对路径或者相对路径的形式指向其他文件或者目录的引用
    • ln -s file file_soft

三:pnpm到底做了什么

  • 当使用npm或yarn,如果你有100个项目,并且所有项目都有一个相同的依赖包,那么,你在硬盘上就需要保存100份改依赖包的副本

  • 使用pnpm,依赖包将会被存放在一个统一的位置:

    1. 同一依赖包使用相同的版本,磁盘上只有这个依赖包的一份文件
    2. 同一依赖包使用不同的版本,则仅有版本之间不同的文件会被存储起来
    3. 所有文件都保存在硬盘上统一的位置
      • 安装软件包时,其包含的所有文件都会硬链接到此位置,而不会占用额外的硬盘空间
      • 方便项目之间共享 相同版本的依赖包

四:pnpm创建非扁平式的node_modules目录

  • 当使用npm或yarn安装依赖包时,所有软件包都会提升到node_modules目录下
    • 其结果是源码可以访问本不属于当前项目所设定的依赖包

image.png

五:pnpm的存储store

命令对照表 image.png

  1. 获取当前活跃的store目录 pnpm store path
  2. 从store删除当前未被引用的包来释放空间 pnpm store prune