首页 > 其他分享 >pnpm的使用

pnpm的使用

时间:2023-01-07 23:35:40浏览次数:57  
标签:node 文件 依赖 pnpm modules 使用 链接

1. pnpm是什么

  pnpm是一种常见的包管理工具,详情可见 官方文档

2. 为什么使用pnpm

  2.1 介绍

    前端常见的包管理工具有yarn、npm、pnpm

    npm1 npm2是采用嵌套结构的,优点是结构清晰可见,问题是依赖不可重用,有大量重复依赖,还有依赖路径可能过长

    npm3/yarn1是采用依赖扁平化,根据node加载模块的路径查找算法,递归向上查找node_modules中的package, 优点是减少重复依赖,依赖层级不会太深,但会有以下问题:

      1. 幽灵依赖(phatom): 因为扁平化处理,把所有依赖都提升到node_modules的一级目录,导致在工作区未声明的包,可以直接被项目引用

      2. 扁平化算法本身比较复杂耗时

      3. 依赖结构的不确定性(doppelgangers),如果a、c依赖的b版本不同,那么哪个b版本先提升都是有可能的(对于同一个依赖的不同版本,将其中一个版本安装到根目录,其他版本安装在各自package下的node_modules,解决依赖不同版本的冲突问题),取决于a和c在package.json中的位置,谁在前那么对应的依赖会被提升

   2.2 pnpm可以解决以上问题,它使用软连接和硬链接来构建node_modules目录

    硬链接:实际上是一个指针指向源文件的inode(存储文件的信息),新建硬链接引用计数加1,删除时只要有引用文件就存在,当你修改源文件或者连接文件任何一个的时候,其他文件都会做同步的修改

    硬链接文件的限制: 不允许给目录创建硬链接;只允许在同一文件系统中的文件之间才能创建链接

    软链接:相当于快捷方式,删除软链接对源文件无影响,删除源文件软链接会找不到要指向的文件

  2.3 pnpm的使用

    比如安装vue,那么node_modules下面会只有vue和.pnpm文件夹,vue所需的依赖都在.pnpm下面,依赖中之间的互相引用是软连接的形式,依赖和全局存储文件的地方 .pnpm-store/v3 之间是硬链接的形式

3. 对包管理器的对比总结:

 当使用npm或者yarn时,如果有100个项目使用了某依赖,那么会有100份依赖保存在磁盘上,而pnpm只创建一份,所有需要用到的采用硬链接过去,允许跨项目共享依赖;

  pnpm使用软链接解决了幽灵依赖和以上2.1介绍中的第3个问题依赖结构的不确定性

 

参考

浅谈pnpm & (软链接 与 硬链接)

为什么推荐使用pnpm

npm中的phatom和doppelgangers问题

pnpm切换指南

都2022年了,pnpm快到碗里来!

 

标签:node,文件,依赖,pnpm,modules,使用,链接
From: https://www.cnblogs.com/dylAlex/p/17023497.html

相关文章

  • WebRTC - STUN/TURN服务器的搭建(使用coturn)
    在进行WebRTC通信时,节点间会按照如下顺序获取对方的地址:1)如果双端在同一个内网,直接用内网IP通信;2)通过STUN服务器,为双端构造可以直接访问的地址,打造一条可以穿透NAT的通路......
  • ecplise日常使用配置
    配置智能提示.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789  配置编码格式  配置注释模板      ${filecomment}$......
  • Phaser的简单使用
    Phaser属于jdk1.7新增的同步工具类 使用CountDownLatch,主线程执行的任务要等副线程执行完毕才可执行Phaser达到同等的效果  packagecom.java.test.phaser;im......
  • 一文掌握Spring事务的基本使用
    1依赖Spring事务的实际源码在spring-tx中:<dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId></dependency>在Spring体......
  • powershell简单的使用gui
    powershell作为win的官方shell,可以调用.net对象。让它可以无所不能。例如给脚本加上图形界面更直观。而且这是win占用文件体积最小的图形程序。几行文本就能构建一个gui程......
  • gdb的使用教程以及gdbpwndbg 常用命令
    gdb的使用教程以及gdb/pwndbg常用命令1、基本使用(参考)#include<iostream>usingnamespacestd;intfunc(intn){ intsum=0; for(inti=0;i<n;i++){ sum+=i;......
  • gdb的使用教程以及gdbpwndbg 常用命令
    gdb的使用教程以及gdb/pwndbg常用命令1、基本使用(参考)#include<iostream>usingnamespacestd;intfunc(intn){intsum=0;for(inti=0;i<n;i++){......
  • 使用云桌面搭建少儿编程环境
    公司从事scratch少儿编程培训,学员需要使用到运行scratch的编程环境。每个培训点大概需要10个左右的电脑。如果使用PC搭建,投入较高,并且管理起来比较复杂。学员再使用后,可能......
  • .Net Core 商城微服务项目系列(十二):使用k8s部署商城服务
    原文网址:https://www.bbsmax.com/A/Ae5RRDeN5Q/一、简介本篇我们将会把商城的服务部署到k8s中,同时变化的还有以下两个地方:1.不再使用Consul做服务的注册和发现,转而使用k......
  • JavaScript学习笔记—使用字面量创建数组
    语法:[]//元素为数字vararr=[1,2,3,6,10];//元素可以是任意数据类型vararr2=["hello",1,true,null,undefined];//也可以是对象varobj={name:"孙悟空......