npm,yarn,pnpm,cnpm,nvm,npx包管理器常用命令

前端比较主流的包管理器主要有三个npm,yarn,pnpm

多层级依赖,通常发生在依赖之间存在复杂的版本要求时

  • 包 A 依赖于包 B@1.0.0

  • 包 B 依赖于包 C@2.0.0

  • 另一个包 D 也依赖于 C@3.0.0

一、NPM (Node Package Manager)

https://www.npmjs.cn/

npm 是 Node.js 默认的包管理工具,最早由 Node 社区开发并捆绑到 Node.js 中,因此使用最为广泛

  • npm v7+, 改进了扁平化管理,引入peer dependencies 处理

    • 自动安装 peer dependencies

    • 更严格的版本锁定

    • 改进了依赖解析算法

    • workspaces 支持

node_modules
├── package-A
├── package-B
├── lodash        // 主版本
└── .package-lock.json  // 更严格的版本锁定

(1)npm install的时候巨慢。特别是新的项目拉下来要等半天,删除node_modules,重新install的时候依旧如此。

(2)同一个项目,安装的时候无法保持一致性。由于package.json文件中版本号的特点,下面三个版本号在安装的时候代表不同的含义。 “5.0.3”表示安装指定的5.0.3版本,“~5.0.3”表示安装5.0.X中最新的版本,“^5.0.3”表示安装5.X.X中最新的版本。这就麻烦了,常常会出现同一个项目,有的同事是OK的,有的同事会由于安装的版本不一致出现bug。

"5.0.3",
"~5.0.3",
"^5.0.3"

二、cnpm

(1) cnpm跟npm用法完全一致,只是在执行命令时将npm改为cnpm。

(2) npm安装插件是从国外服务器下载,受网络影响大,可能出现异常,如果npm的服务器在中国就好了,于是淘宝团队干了这事。来自官网:“这是一个完整 npmjs.org镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。

  npm install -g cnpm --registry=https://registry.npm.taobao.org

三、Yarn

https://www.yarnpkg.cn/

CLI Reference | Yarn

  npm install -g yarn

Yarn 是一个 JavaScript 包管理工具,最早由 Facebook 推出,主要用于管理项目中的依赖包。和 npm 类似,yarn 解决了在 JavaScript 项目中下载、安装和管理依赖的需求,并在一定程度上改进了 npm 的一些缺点,比如性能、稳定性和安全性

  • 优点:

    • 采用扁平化优先 + 符号链接(符号链接是一个特殊的文件,它包含对另一个文件或目录的引用路径)的组合策略

    • 相同版本的包会被提升并复用

    • 不同版本通过符号链接保持正确的引用关系

  • 基本结构

node_modules/
├── package-A/                # 实际文件
├── package-B/                # 实际文件
├── lodash/                   # 提升到顶层的共享包
└── .bin/                     # 可执行文件的符号链接
  • 依赖共享案例

// 假设有以下依赖关系:
项目
├── package-A (依赖 lodash@4.0.0)
└── package-B (依赖 lodash@4.0.0)// Yarn 会创建这样的结构:
node_modules/
├── package-A/
│   └── node_modules/
│       └── lodash -> ../../../lodash  # 符号链接
├── package-B/
│   └── node_modules/
│       └── lodash -> ../../../lodash  # 符号链接
└── lodash/                            # 实际文件
  • 版本冲突处理

// 当存在版本冲突时:
项目
├── package-A (依赖 lodash@4.0.0)
└── package-B (依赖 lodash@3.0.0)// Yarn 会这样处理:
node_modules/
├── package-A/
│   └── node_modules/
│       └── lodash -> ../../../lodash    # 指向4.0.0
├── package-B/
│   └── node_modules/
│       └── lodash/                      # 本地安装3.0.0
└── lodash/                              # 4.0.0版本在顶层

四、PNPM(Performant NPM)

https://www.pnpm.cn/

pnpm 是一个更现代化的包管理工具,旨在解决 npm 和 yarn 的一些效率和资源管理问题

采用内容寻址存储系统,

pnpm 使用内容寻址(content-addressable storage)来存储依赖包。每个依赖包都会被哈希处理,并根据其内容生成唯一的存储地址。这样,即使多个项目依赖于相同版本的包,pnpm 也只需要存储一份,不会重复存储同样内容的文件

使用硬链接和符号链接共享依赖

pnpm 通过在 node_modules 中创建硬链接或符号链接(symlink),指向内容寻址存储中实际的依赖包。这样每个项目可以“共享”依赖,而不必为每个项目单独存储依赖包内容。

硬链接(Hard Link) :将文件内容链接到项目文件夹下,不占用额外磁盘空间。

符号链接(Symlink) :为特定版本的包创建路径映射,使项目代码能够准确找到每个依赖包版本的地址。

npm install -g pnpm     // 通过 npm 安装 pnpm
npx pnpm add -g pnpm    // 通过 npx 安装 pnpmpnpm add -g pnpm
  • 优点:

    • 显著节省磁盘空间

    • 安装速度快

    • 更严格的依赖管理

    • pnpm-lock.yaml 确保依赖版本一致

  • 缺点:

    不兼容一些使用传统 node_modules 结构的工具和插件:

    在 pnpm 中,每个依赖都有自己的隔离路径,某些工具、插件或构建系统可能会假设 node_modules 目录是扁平的,这可能导致兼容性问题。

    与本地开发和测试环境的潜在不兼容:

    有些项目依赖于本地 node_modules 结构,或者需要直接访问 node_modules 中的文件。在 pnpm 使用内容寻址和符号链接时,这可能会导致某些工具无法正常运行

  • 内容寻址存储

.pnpm-store/
└── v3/└── files/├── 00/                              # 前两位哈希值作为目录名│   └── deadbeef...                  # 包内容的哈希值└── ff/└── cafebabe...                  # 另一个包的哈希值
  • 依赖结构

node_modules/
├── .pnpm/
│   ├── react@17.0.2/
│   │   └── node_modules/
│   │       ├── react/                       # 实际文件(硬链接到 store)
│   │       └── loose-envify/                # react 的依赖
│   └── lodash@4.17.21/
│       └── node_modules/
│           └── lodash/                      # 实际文件(硬链接到 store)
├── react -> .pnpm/react@17.0.2/node_modules/react                 # 符号链接
└── lodash -> .pnpm/lodash@4.17.21/node_modules/lodash             # 符号链接

npm 与 yarn 及 pnpm常用命令

npm常用命令

// 查看 npm 全局安装过的包
npm list -g --depth 0
// 全局安装
npm install <package> -g
// 安装项目所有依赖
npm install
// 安装指定版本
npm install <package>@1.2.3
// 安装最新版本
npm i <package>@latest
// 删除全局的包
npm uninstall -g <package>
// 删除 node_modules 目录下面的包
npm uninstall <package>
// 更新指定包
npm update <package>
// 更新指定全局包
npm update -g <package>
// 更新本地安装的包
// 在 package.json 文件所在的目录中执行 npm update 命令
// 执行 npm outdated 命令。不应该有任何输出。

yarn 常用命令

// 查看 yarn 全局安装过的包
yarn global list --depth=0
// 全局安装
yarn global add <package>
// 安装所有依赖
yarn
// 安装指定版本
yarn add <package>@<version>
// 安装最新版本
yarn add <package>
// 删除包,会更新package.json和yarn.lock
yarn remove <package>
// 更新包
yarn upgrade
// 更新指定的包
yarn upgrade <package>
// 获取可更新的包列表选择更新
yarn upgrade-interactive --latest
// 更新全局依赖
yarn global upgrade --latest
// 更新全局依赖,有交互
yarn global upgrade-interactive --latest
// 列出已缓存的包
yarn cache list
// 查找缓存包的路径
yarn cache dir
// 清除缓存的包
yarn cache clean

五、npmyarn 和 pnpm 的比较

特性npmyarnpnpm
依赖管理方式扁平化管理,嵌套依赖树,可能重复安装扁平化管理和符号链接,同版本只安装一次基于硬链接和符号链接的内容寻址存储
安装速度最慢中等(并行安装)最快(得益于硬链接复用)
磁盘空间占用最大中等最小
依赖管理严格性低(可能存在幽灵依赖)中等高(严格的依赖树结构)
锁文件格式package-lock.jsonyarn.lockpnpm-lock.yaml
缓存机制基础缓存高效缓存基于内容寻址的全局存储
并行安装能力不支持 (npm5-) / 支持 (npm5+)支持支持
依赖提升策略部分提升全量提升不提升(严格按照依赖声明)
workspace 支持有限支持完整支持完整支持

基于这些特点:

  • 如果项目体积较小,团队成员 Node.js 经验不同,推荐使用 npm

  • 如果需要更好的性能和可靠性,推荐使用 yarn

  • 如果需要最严格的依赖管理、最小的磁盘空间占用,推荐使用 pnpm

六、npmyarn 和 pnpm 的常用命令对比

操作npmyarnpnpm
初始化项目npm inityarn initpnpm init
(-y为自动确认默认选项)npm init -yyarn init -ypnpm init -y
安装依赖npm installyarnpnpm install
安装单个依赖npm install <pkg>yarn add <pkg>pnpm add <pkg>
安装特定版本npm install <pkg>@<ver>yarn add <pkg>@<ver>pnpm add <pkg>@<ver>
全局安装依赖npm install -g <pkg>yarn global add <pkg>pnpm add -g <pkg>
安装开发依赖npm install <pkg> -Dyarn add <pkg> -Dpnpm add <pkg> -D
更新依赖npm update <pkg>yarn upgrade <pkg>pnpm update <pkg>
卸载依赖npm uninstall <pkg>yarn remove <pkg>pnpm remove <pkg>
查看已安装依赖npm listyarn listpnpm list
执行脚本npm run <script>yarn <script>pnpm run <script>
装指定注册源npm install --registry <url>yarn add <pkg> --registry <url>pnpm add <pkg> --registry <url>
清理缓存npm cache clean --forceyarn cache cleanpnpm store prune
创建锁定文件package-lock.jsonyarn.lockpnpm-lock.yaml
列出全局包npm list -g --depth=0yarn global listpnpm list -g --depth=0

七、npx

npx 是 npm 5.2.0 版本引入的一个命令行工具。它允许你在不全局安装包的情况下运行命令行工具。npx 可以直接运行安装在项目中的依赖包,而不需要手动设置环境变量或全局安装

八、nvm

Node Version Manager):nvm 是一个用于管理多个 Node.js 版本的工具。它允许你在同一台机器上安装和切换不同的 Node.js 版本。nvm 可以帮助开发人员在不同的项目中使用不同的 Node.js 版本,以适应项目的需求。

nvm install  8.10.0  //安装ndoe  8.10.0为node版本
nvm list  //查看nvm管理的node版本列表,正在使用的版本在列表前有星号标记
nvm use 8.10.0  //使用node指定版本 
nvm uninstall 8.10.0 //卸载指定node版本nvm-setup.zip 一个安装包,下载之后点击安装,连续点击下一步,无需任何配置,推荐
nvm-noinstall.zip 绿色免安装,使用之前需要配置,不推荐
Source code(zip):压缩的源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/79817.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

科普简洁版:同态加密——密码学的未来瑰宝

文章目录 一、同态加密的基本概念1.1 什么是同态加密1.2 同态加密的数学本质1.3 同态加密的类型 二、主要同态加密方案详解2.1 ElGamal加密2.2 Paillier加密2.3 Gentry的完全同态加密方案2.4 BGV方案2.5 BFV方案2.6 CKKS方案 三、同态加密的关键技术3.1 噪声管理技术3.2 多项式…

力扣第448场周赛

赛时成绩如下: 这应该是我力扣周赛的最好成绩了(虽然还是三题) 1. 两个数字的最大乘积 给定一个正整数 n。 返回 任意两位数字 相乘所得的 最大 乘积。 注意&#xff1a;如果某个数字在 n 中出现多次&#xff0c;你可以多次使用该数字。 示例 1&#xff1a; 输入&#xff1…

(一)Modular Monolith Architecture(项目结构/.net项目初始化/垂直切片架构)

文章目录 项目地址一、项目结构1.1 Modules1. Events 模块2. Users 模块3. Ticketing 模块4. Attendance 模块1.2 数据库模块1.3 模块架构选择1. 全是Clean Architecture2. 分别使用不同的架构二、初始化项目2.1 本地创建项目结构1. 创建空的solution2. 添加基础配置3. 创建git…

Java常用组件之Redis经典面试题(一)

大家好&#xff0c;今天为大家带来Java项目中&#xff0c;几乎必不可少的组件之一-Redis的一些常见面试题&#xff0c;帮忙近期需要面试的朋友们来一个理论基础突击&#xff01; 一、数据类型 1.Redis的常用数据类型有哪些 ? 难易程度&#xff1a;☆☆☆ 出现频率&#xff1a;…

2025.5.4总结

今天去光谷步行街逛了一下&#xff0c;感觉熟悉又陌生&#xff0c;说熟悉是因为初二的时候来过武汉光谷&#xff0c;尽管过去了8年时间&#xff0c;但丝毫不影响标志性建筑的存在&#xff0c;也陌生是商场的建筑风格真实气派&#xff0c;感觉进入了一座城堡&#xff0c;在里面都…

神经网络在专家系统中的应用:从符号逻辑到连接主义的融合创新

自人工智能作为一个学科面世以来&#xff0c;关于它的研究途径就存在两种不同的观点。一种观点主张对人脑的结构及机理开展研究&#xff0c;并通过大规模集成简单信息处理单元来模拟人脑对信息的处理&#xff0c;神经网络是这一观点的代表。关于这方面的研究一般被称为连接机制…

Doo全自动手机壳定制系统

Doo全自动手机壳定制系统 项目概述 Doo全自动手机壳定制系统是一个完整的手机壳定制解决方案&#xff0c;支持多端应用&#xff0c;包括服务端、客户端、管理后台等多个组件。系统采用现代化的技术栈&#xff0c;提供完整的手机壳定制、订单管理、用户管理等功能。 目录结构…

PageOffice在线打开word文件,并实现切换文件

本示例关键代码的编写位置&#xff0c;请参考“PageOffice 开发者中心-快速起步–开始 - 快速上手”里您所使用的开发语言框架的最简集成代码 注意 本文中展示的代码均为关键代码&#xff0c;复制粘贴到您的项目中&#xff0c;按照实际的情况&#xff0c;例如文档路径&#xff…

Webug4.0靶场通关笔记12- 第17关 文件上传之前端拦截(3种方法)

目录 一、文件上传前端拦截原理 二、第17关 文件上传(前端拦截) 1.打开靶场 2.构造php脚本 3.源码分析 &#xff08;1&#xff09;js源码 &#xff08;2&#xff09;服务器源码 &#xff08;3&#xff09;总结 4.渗透实战 &#xff08;1&#xff09;禁用js法 &#…

高性能 WEB 服务器 Nginx:多虚拟主机实现!

Nginx 配置多虚拟主机实现 多虚拟主机是指在一台 Nginx 服务器上配置多个网站 在 Nginx 中&#xff0c;多虚拟主机有三种实现方式&#xff1a; 基于IP地址实现多虚拟主机 基于端口号实现多虚拟主机 基于域名实现多虚拟主机 1 基于域名实现多虚拟主机 在 Nginx 中配置多个…

网星安全AWS攻防方案,重磅发布!

AWS介绍 AWS&#xff08;Amazon Web Services&#xff09; 是 Amazon 提供的云计算平台&#xff0c;提供了广泛的云服务&#xff0c;包括计算、存储、数据库、网络、安全、人工智能、大数据处理等功能&#xff0c;帮助企业和开发者构建、部署和管理应用程序。AWS 是全球最大的…

qt的containers里的QToolBox和QTabWidget

Tool Box是一个多层次的折叠面板&#xff0c;通常用于组织多个可展开/折叠的面板组&#xff0c;每个面板有一个标题栏&#xff0c;用户点击标题栏可以展开或收起内容区域。比如设置界面中的分类选项&#xff0c;每个分类可以展开查看详细内容。这样能节省空间&#xff0c;让界面…

【神经网络与深度学习】深度学习中的生成模型简介

深度学习中的生成模型 openai 的一个古早介绍 引言 深度学习中的生成模型能够学习数据分布并生成新数据&#xff0c;在人工智能的多个领域中都有重要应用。不同类型的生成模型在原理和结构上各有特点&#xff0c;适用于不同的任务&#xff0c;如图像生成、文本生成和时间序列…

js获取明天日期、Vue3大菠萝 Pinia的使用

直接上代码 const today new Date(2019, 2, 28) const finalDate new Date(today) finalDate.setDate(today.getDate() 3)console.log(finalDate) // 31 March 2019 安装 yarn add pinia # or with npm npm install pinia创建第一个store仓库 1、在src目录下创建store目录…

存储过程补充——定义条件、处理程序及游标使用

文章目录 1. 定义条件与处理程序1.1 定义条件1.2 处理程序1.3 案例演示 2. 游标2.1 使用游标第一步&#xff0c;声明游标第二步&#xff0c;打开游标第三步&#xff0c;使用游标&#xff08;从游标中取得数据&#xff09;第四步&#xff0c;关闭游标 2.2 举例2.3 小结 在 MySQL…

蓝桥杯单片机国赛模板——基于柳离风模板

蓝桥杯单片机国赛模板——基于柳离风模板 文章目录 蓝桥杯单片机国赛模板——基于柳离风模板一、工程结构二、USER文件夹main.c 三、BSP文件夹1、sys2、display3、key4、timer5、iic6、ds13027、onewire8、uart9、ultrasound 四、源码五、内存不够 一、工程结构 与省赛模板相比…

C与指针——常见库函数

字符串 #include<stdlibs.h> int abs(int); long labs(long); int rand(void);//0-RAND_MAX //字符串转值 int atoi(const char*); long atol(const char*); float atof(const char*);数学\排序 #include<math.h> \\常见三角&#xff0c;sqrt(); exp(); double p…

数学复习笔记 2

前言 朋友和我讨论了一个二重积分题&#xff0c;非常有意思。内容非常细致。整理如下&#xff1a; 二重积分 题目来源是 1000 上面的 16 题&#xff0c;积分区域是一个偏心圆&#xff0c;偏心圆的圆心在 y 轴上面&#xff0c;偏心圆是关于 y 轴对称的&#xff0c;可以看关于…

Javaweb项目--Mybatis,导入com.mysql.cj.jdbc.Driver时报错,Cannot resolve class ‘Driver‘

目录 问题解决方法结果 问题 在项目java文件下&#xff0c;包文件下的application.properties文件中&#xff0c;项目目录如下&#xff1a; 报错信息如下&#xff1a; 解决方法 在pom.xml文件中增加此依赖 结果 报错信息消失

分布式-redisson

分布式锁redisson 加锁流程缓存相关问题 加锁流程 redisson底层通过lua脚本实现加锁的原子性lock动作包含&#xff1a;加锁、设置超时时间、锁续命未获取到锁的线程通过获取信号量许可等待&#xff0c;所释放后释放信号量通知等待线程 缓存相关问题 缓存失效&#xff08;击穿…