• npmp 的简单理解


    pnpm,英文里面的意思叫做 performant npm ,意味“高性能的 npm”
    通俗易懂的解释

    简单理解:本概况来自于传送门

    1. node 2.x 版本 存在的问题 npm2 的 node_modules 是嵌套的 简单来说就就是 node_modules
      里面还有node_modules 这样嵌套的话,同样的依赖会复制很多次,会占据比较大的磁盘空间。这个还不是最大的问题致命问题是 windows 的文件路径最长是 260 多个字符,这样嵌套是会超过 windows 路径的长度限制的。 由此引出了新的方案yarn

    2. node3.x 版本 同yarn 采用了同一种原理 :平铺 所有的依赖不再一层层嵌套了,而是全部在同一层,这样也就没有依赖重复多次的问题了也就没有路径过长的问题了 但是个别包中还是会有 node_modules
      为什么会有嵌套:因为一个包是可能有多个版本的,提升只能提升一个,所以后面再遇到相同包的不同版本,依然还是用嵌套的方式 为什么会出现pnpm
      最主要的一个问题是幽灵依赖,也就是你明明没有声明在 dependencies 里的依赖,但在代码里却可以 require 进来。这个也很容易理解,因为都铺平了嘛,那依赖的依赖也是可以找到的。
      但是这样是有隐患的,因为没有显式依赖,万一有一天别的包不依赖这个包了,那你的代码也就不能跑了,因为你依赖这个包,但是现在不会被安装了。

      这就是幽灵依赖的问题。

      而且还有一个问题,就是上面提到的依赖包有多个版本的时候,只会提升一个,那其余版本的包不还是复制了很多次么,依然有浪费磁盘空间的问题。

    3. pnpm的解决方式
      回想下 npm3 和 yarn 为什么要做 node_modules 扁平化?不就是因为同样的依赖会复制多次,并且路径过长在 windows 下有问题么?

    那如果不复制呢,比如通过 link。

    首先介绍下 link,也就是软硬连接,这是操作系统提供的机制,硬连接就是同一个文件的不同引用,而软链接是新建一个文件,文件内容指向另一个路径。当然,这俩链接使用起来是差不多的。

    如果不复制文件,只在全局仓库保存一份 npm 包的内容,其余的地方都 link 过去呢?

    这样不会有复制多次的磁盘空间浪费,而且也不会有路径过长的问题。因为路径过长的限制本质上是不能有太深的目录层级,现在都是各个位置的目录的 link,并不是同一个目录,所以也不会有长度限制。

    没错,pnpm 就是通过这种思路来实现的。所有的依赖都是从全局 store 硬连接到了 node_modules/.pnpm 下,然后之间通过软链接来相互依赖。

    pnpm 的安装与使用

    通过npm安装
    npm install -g pnpm
    //查看源
    pnpm config get registry 
    //切换淘宝源
    pnpm config set registry https://registry.npmmirror.com/
    
    // 使用
    pnpm install 包  // 下载包
    pnpm i 包       // 下载包
    pnpm add 包    // -S  默认写入dependencies
    pnpm add -D    // -D devDependencies
    pnpm add -g    // 全局安装
    
    //更新
    pnpm up                //更新所有依赖项
    pnpm upgrade 包        //更新包
    pnpm upgrade 包 --global   //更新全局包
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
  • 相关阅读:
    Docker从入门到实战
    nginx进程间同步机制-互斥锁
    OpenFeign实现分析、源码解析
    使用 Hugging Face Transformer 创建 BERT 嵌入
    Unirech腾讯云国际站代充-云服务器系统盘使用问题
    3.1.2 内存池的实现与场景分析
    时序预测 | MATLAB实现基于PSO-BiGRU、BiGRU时间序列预测对比
    利用牛顿方法计算正数的平方根
    HashMap源码解析(jdk1.8,万字大章,图文并茂)
    Java:SynchronousQueue同步队列
  • 原文地址:https://blog.csdn.net/IT_iosers/article/details/126580702