• 关于npm/cnpm/npx/pnpm与yarn


    package.json

    dependencies

    • 安装在dependencies中的包,一般是线上的项目运行所依赖的包
    • 一般安装这里面的包,项目就可以正常运行了
    • 通过NODE_ENV=production npm i来进行安装

    devDependencies

    • 开发环境所需要的包,一般一些工具包,我们都安装在这里面,如eslint等
    • 一些打包转义的工具包,一般也放在这里面,如webpackloader

    包的版本

    我们安装的包一般都是想如下

    {
    	...
        "core-js": "3.20.3",
        "css-loader": "^3.5.3",
        "es6-promise": "^4.1.0",
        "fast-sass-loader": "^2.0.1",
        ...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    命名格式

    • "core-js": "3.20.3",他后面的就是版本号
      • 3是主版本号,代表的是不兼容的 API 修改
      • 20是次版本号,代表的是向下兼容的功能性新增
      • 3是修订号,代表的是向下兼容的问题修正
    • 此外,我们还会发现在版本号的前面,还有一些特殊的符号
      • ~表示我们在更新包的时候,只更新补丁版本
        • 如果写入的是 〜0.13.0,则只更新补丁版本:即 0.13.1 可以,但 0.14.0 不可以。
      • ^表示我们在更新包的时候,更新补丁版本和此版本
        • 如果写入的是 ^0.13.0,则要更新补丁版本和次版本:即 0.13.1、0.14.0、依此类推。
      • 如果没有前缀,则始终保持这个版本
        • 如果写入的是 0.13.0,则始终使用确切的版本。

    package-lock.json

    • 从npm5版本之后,就推出了package-lock.json
    • package-lock.json的优先级会高于package.json,package-lock.json会固定当前项目的包版本
    • 想要更新package-lock.json,我们就必须使用命令npm update
      • 但是这样的话会把多有的依赖的包都升级
      • 还是推荐如果需要升级的话,就单独对一个包进行升级

    npm

    npm 是nodejs的标准的软件包管理器,通常,我们安装的包都在package.json中体现

    • 因为npm使我们比较常用的包管理工具,所以这里我们就不仔细介绍了
    • 常用命令 点击

    yarn

    • yarn目前变现的比npm会快一些,是因为yarn目前安装是并行安装,而npm是串行安装
    • 在缓存机制上 ,两者都差不多,都会读取本地缓存
    • 但是在安装包的显示和设计上yarn会更友好一点
    • 常用命令 点击

    cnpm

    • cnpm的镜像仓库在国内,也就是淘宝,我们可以全局安装cnpm
    npm install -g cnpm --registry=https://registry.npm.taobao.org
    
    • 1
    • 当然我们也可以把npm的镜像库设置为淘宝源
    npm config set registry http://registry.npm.taobao.org
    
    • 1
    • 需要注意的是cnpm没有package-lock.json,即我们使用cnpm的时候,他不会自动产生package-lock.json,即使项目中有package-lock.json他也是不管不顾的,只读取package.json
    • 这就会导致一些意想不到的bug,并且有时候cnpmnpm下载的包是不相容的
    • 所以,能用npm就尽量不是用cnpm

    pnpm

    简介

    pnpm最大的特点就是

    1. 包安装速度极快
    2. 磁盘空间利用效率高
      1. 硬链接:硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。
      2. 软连接:另外一种连接称之为符号连接,也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

    也就是说

    1. 不会重复安装同一个包。使用npm/yarn 的时候,如果100个包依赖lodash ,那么就可能安装了100次lodash ,磁盘中就有100个地方写入了这部分代码。但是pnpm会只在一个地方写入这部分代码,后面使用会直接使用hard link
    2. 即使一个包的不同版本,pnpm 也会极大程度地复用之前版本的代码。举个例子,比如 lodash 有 100 个文件,更新版本之后多了一个文件,那么磁盘当中并不会重新写入 101 个文件,而是保留原来的 100 个文件的 hardlink,仅仅写入那一个新增的文件。

    安装

    官网

    npm i pnpm -g
    
    • 1

    文章参考
    文章参考二

  • 相关阅读:
    C++初识 - 引用
    WPF(2)命令绑定
    手机在网状态-手机在网状态查询-手机在网站状态接口
    锚点 smooth-scrolljs库 平滑滚动 / scrollIntoView
    java毕业生设计信管专业毕业生就业管理信息系统计算机源码+系统+mysql+调试部署+lw
    Python - Wave2lip 环境配置与 Wave2lip x GFP-GAN 实战 [超详细!]
    ADBMS1818芯片资料介绍(1)
    React与Vue的区别
    【SpringCloud】API网关(Spring Cloud Gateway)
    Prometheus-3:一文详解promQL
  • 原文地址:https://blog.csdn.net/youhebuke225/article/details/126155866