Node包管理工具 - nvm、npm、yarn、cnpm、pnpm

转载说明

原文地址

简介

nvm : 可以实现一台电脑,拥有多个版本的Node
npm : node package manager 下载Node后自带的一个包管理工具
yarn : npm 的升级版,更优秀
cnpm : 配置下载非官方地址的依赖(淘宝、华为、腾讯镜像)
pnpm : performant node package manager 更优秀的npm包管理工具
nrm:下载镜像地址管理工具

nvm

参见使用 nvm 实现对 Node 的多版本管理

npm

Node Package Manager,就是Node包管理器
npm属于node的一个管理工具,所以我们需要先安装Node:https://nodejs.cn/
安装Node的过程会自动安装npm工具,每个版本的node对应的npm版本不相同

使用npm初始化一个文件夹

  1. 手动创建package.json文件
  2. 使用命令npm init -y(-y表示yes,使用默认的配置)
属性配置:
{"name": "project",// 项目名字"private": true,// 当前项目是否私有,当值为true时,npm时不能发布它的// 这个的用处时防止不小心把项目发布到仓库中,变为开源的"version": "0.0.0","type": "module",// 模块化规范,export/import"scripts": {// 配置一些脚本命令(重要);可以通过npm run key的方式运行脚本"dev": "vite --open","build": "vue-tsc && vite build",......},"dependencies": {// 开发环境和生产环境都需要的依赖"@element-plus/icons-vue": "^2.3.1","axios": "^1.6.2",......},"devDependencies": {// 开发环境需要的依赖"@babel/eslint-parser": "^7.23.3","@commitlint/cli": "^18.4.3",......}
}
依赖的版本管理

npm的包通常需要遵从semver版本规范:
semver:https://semver.org/lang/zh-CN/
npm semver:https://www.npmjs.com/package/semver

semver版本规范是:X.Y.ZX主版本号(major):当你做了不兼容的API修改(可能不会兼容之前的版本)Y次版本号(minor):当你做了向下兼容的功能新增(新功能增加,但是兼容之前的版本)Z修订号(patch):当你做了向下兼容的问题修正(没有新功能,修复了之前版本存在的bug)
^和~的区别x.y.z:表示一个明确的版本号;每次npm install下载都会下载这个指定好的版本^x.y.z:表示x是保持不变的,y和z永远安装最新的版本~x.y.z:表示x和y保持不变,z永远安装最新的版本
npm install 命令

包的安装:
局部安装:npm install axios
全局安装:npm install yarn -g
通常全局下载的包:vue-cli、yarn、cnpm

npm install axios --save(完整写法 --save 可以省略)
npm i axios(简写)
npm i axios@1.6.2(指定版本安装)npm install webpack --save-dev(安装开发依赖完整写法)
npm i webpack -D(简写)强制重建
npm rebuild
清除本地缓存
npm cache clean --force

npm 5.x之后安装依赖会自动产生一个package-lock.json
存放有依赖包的依赖关系
install原理

没有lock文件-分析构建依赖关系,因为我们的包会依赖其他的包,并且多个包之间会产生相同依赖的情况-从registry仓库中下载压缩包(如果设置了镜像,那么就会从镜像服务器中下载压缩包)-获取到压缩包后会对压缩包进行缓存(npm5开始有的)-将压缩包解压到项目的node_modules文件中
有lock文件-检测lock中包的版本是否和package.json中的一致-不一致,就会重新构建依赖关系,走上面的流程-一致的情况,会去有限查找缓存-没有找到,就会从registry仓库上下载,然后接着走上面的流程-找到,会获取缓存中的压缩文件,并且将压缩文件解压到node_modules文件夹中

yarn

yarn 的出现是为了解决早期npm存在的一些问题(安装依赖速度很慢、版本依赖混乱等等一系列问题)
但npm 5.x版本之后有了很大的升级和改进
详细参考

cnpm

cnpmnpm用法一致,可在npm的基础上配置另一个镜像仓库地址来下载依赖
配置方法参考npm

npx

npx 用于在项目目录中,直接执行依赖包中的命令,比如less的命令、webpack的命令等等

下载的所有的依赖中包含的命令,全部在node_module->.bin目录下。
当你在项目目录中执行webpack -v的时候,会从你当前项目目录中找命令,并不会智能的去子目录中找
当在子目录中找不到的时候,就会去全局查找(我们使用npm安装的时候,后面 -g 的命令)
当全局和局部都安装了相同的包时,在当前项目下执行命令yarn -v,就会执行全局版本的命令。但是当进入.bin目录后,再次执行命令,还是执行全局版本的命令。
只有执行npx yarn -v的时候,才会执行局部版本的命令
所以当你想执行依赖包中的命令的时候有以下办法每次执行命令进入到node_modules->.bin目录中执行.\webpack -v命令 (最麻烦不推荐)
可以在script脚本中写"webpackV":"webpack -v",在这里可以省略npx,但是如果执行的命令多的话,就需要定义很多脚本,也很麻烦 (不推荐使用)
最简单的办法就是直接在项目目录下,执行npx webpack -v命令,这样就会自己去node_modules->.bin目录中寻找 (非常推荐)

pnpm

pnpm :官方给的解释是performant npm(性能更好的npm)

  • 特点
    pnpm特点

出现背景:

  1. 你的电脑可能有好几个前端项目,每个项目都有各自的依赖包,存放在mode_modules中,但不同的项目中可能会有多个相同的依赖,也就是说同一份依赖在你的电脑中存在于几个web项目中。这样显然是很占用资源的!
  2. 每个新项目下载资源也会非常的耗费时间
  3. npm5和yarn为了解决依赖的依赖和其他依赖的依赖重复问题,使用了扁平化安装依赖。比如:我们安装axios的时候,可以看到node_modules中多了很多依赖包,这些依赖包都是axios依赖中所拥有的依赖,它们在npm5版本之前,是会存到各自文件的node_modules中,但是这样又无法解决一个依赖的依赖和另一个依赖的依赖是一个版本,但是却被下载了两份的问题。所以后面改成和yarn一样,对node_modules进行了扁平化管理。
  4. 上面这样的坏处是,由于依赖的依赖被拉出来了,导致我的项目中也能使用这个依赖。但是我的package.json并没有记录这个依赖。假如有一天axios被删除了,那么它的依赖也会跟着删除。如果我项目中使用了这个依赖,就会报错。这样的以来问题称之为:幽灵依赖

pnpm应运而生
pnpm使用操作系统中的软连接/硬链接就解决了上面这几个问题

pnpm下载

通过npm下载:npm i pnpm -g
pnpm init 初始化文件夹(对,-y可以省略)
pnpm命令查看官网

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

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

相关文章

day70

今日回顾 session 中间件 auth session Cookie虽然在一定程度上解决了“保持状态”的需求,但是由于Cookie本身最大支持4096字节,以及Cookie本身保存在客户端,可能被拦截或窃取,因此就需要有一种新的东西,它能支持更…

辛普森距离(SD,Sampson Distance)

定义 Sampson误差是复杂性介于代数误差和几何误差之间,但非常近似于几何误差的一种误差。 应用 SLAM对极几何中使用到SD来筛选内点: 1.随机采样8对匹配点 2.8点法求解基础矩阵 ​; 3.奇异值约束获取基础矩阵F; 4.计算误差&…

4、单例模式(Singleton Pattern)

单例模式是保证系统实例唯一性的重要手段。单例模式首先通过将类的实例化方法私有化来防止程序通过其他方式创建该类的实例,然后通过提供一个全局唯一获取该类实例的方法帮助用户获取类的实例,用户只需也只能通过调用该方法获取类的实例。 单例模式的设…

通达信指标公式19:龙虎榜股票池——主力控盘度的计算方法

0.小红牛本指标,选股的思路说明:控盘度,又称主力控盘,是指主力控制了某只股票的大部分流通股,从而控制了股票的价格。主力控盘的目的通常是为了获取更多的收益,通过控制股票价格来实现其策略。所以首要分析…

(04730)电路分析基础之电阻、电容及电感元件

04730电子技术基础 语雀(完全笔记) 电阻元件、电感元件和电容元件的概念、伏安关系,以及功率分析是我们以后分析电 路的基础知识。 电阻元件 电阻及其与温度的关系 电阻 电阻元件是对电流呈现阻碍作用的耗能元件,例如灯泡、…

Hadoop学习笔记(HDP)-Part.04 基础环境配置

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

外包干了2个月,技术倒退2年。。。。。

先说一下自己的情况,本科生,20年通过校招进入深圳某软件公司,干了接近4年的功能测试,今年国庆,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

现代版“田忌赛马”:IPMT如何实现资源利用最大化

摘要:在流程调整和产品重整过程中,IPMT发挥了至关重要的作用。IPMT是什么?它的职责到底是什么?每个公司必须要有IPMT吗? 1992年,IBM在激烈的市场竞争下,遭遇到了严重的财政困难,利润…

Mysql中RTRIM、LTRIM、TRIM函数的区别

一、概述 在MySQL中,LTRIM、RTRIM和TRIM是用于去除字符串两端空格或指定字符的函数,它们的区别如下: LTRIM(): LTRIM表示"Left Trim",用于去除字符串左侧的空格或指定字符。语法:LTRIM(str) …

机器学习-ROC曲线:技术解析与实战应用

本文全面探讨了ROC曲线(Receiver Operating Characteristic Curve)的重要性和应用,从其历史背景、数学基础到Python实现以及关键评价指标。文章旨在提供一个深刻而全面的视角,以帮助您更好地理解和应用ROC曲线在模型评估中的作用。…

Java 多线程之 Semaphore(信号量/限流/同步辅助类)

文章目录 一、概述二、使用方法三、测试示例 一、概述 Semaphore(信号量)是一种并发控制机制,用于控制对共享资源的访问。它维护了一个计数器,可以限制同时访问某个资源的线程数量。常用于限制同时访问某个资源的线程数量&#xf…

MySQL查看和修改时区

为了验证 TIMESTAMP 存储时间与时区有关,显示的值也依赖于时区 看了mysql 时区 时间网 世界时区 MySQL查看和修改时区的方法 查看当前时区 1. 在MySQL客户端,可以通过如下命令查看当前时区: SELECT global.time_zone;2. 查看当前时区的设…

字符串方法

字符串方法 字符串截取slice() 字符串截取subString() 字符串截取substr() 字符串切割slice() 字符串开始start() 字符串结束end() 字符串去空trim() 字符串合并 concat() 字符串包含includes() 字符串下标 indexOf() 字符串倒序查…

【新手解答8】深入探索 C 语言:递归与循环的应用

C语言的相关问题解答 写在最前面问题:探索递归与循环在C语言中的应用解析现有代码分析整合循环示例代码修改注意事项结论 延伸:递归和循环的退出条件设置解析使用递归使用循环选择适合的方法 写在最前面 一位粉丝私信交流,回想起了当初的我C…

Zabbix HA高可用集群搭建

Zabbix HA高可用集群搭建 Zabbix HA高可用集群搭建一、Zabbix 高可用集群(Zabbix HA)二、部署Zabbix高可用集群1、两个服务端配置1.1主节点 Zabbix Server 配置1.2 备节点 Zabbix Server 配置1.3 主备节点添加监控主机1.4 查看高可用集群状态 2、两个客户…

【数据结构与算法】JavaScript实现二叉搜索树

文章目录 一、二叉搜索树的封装1.插入数据2.遍历数据2.1.先序遍历2.2.中序遍历2.3.后续遍历 3.查找数据3.1.查找最大值&最小值3.2.查找特定值 4.删除数据4.1.情况1:没有子节点4.2.情况2:有一个子节点4.3.情况3:有两个子节点4.4.完整实现 …

成为AI产品经理——回归模型评估(MSE、RMSE、MAE、R方)

分类问题的评估是看实际类别和预测类别是否一致,它的评估指标主要有混淆矩阵、AUC、KS。回归问题的评估是看实际值和预测值是否一致,它的评估指标包括MAE、MSE、RMSE、R方。 如果我们预测第二天某支股票的价格,给一个模型 y1.5x,…

查询绑定了所有id的name

1、如图,绑定了所有id的有A,B两个name 2、第一种Sql及效率 explain SELECT name,count(id) as count from test GROUP BY name HAVING count(id)(SELECT count(DISTINCT id) from test); 3、第二种sql及效率 explain select * from (SELECT name,count(id) as co…

SQL自学通之简介

目录 一、SQL 简史 二、数据库简史 1、Dr. Codds 对关系型数据库系统的十二条规则 2、设计数据库的结构 3、数据库的前景 4、对于什么是客户机/服务器型电脑系统 BernardH.Boar的定义如下: 5、交互式语言 6、易于实现 7、SQL 总览 三、流行的 SQL 开发工具…

MFC 绘制单一颜色圆形、渐变颜色边框圆形、渐变填充圆形以及绘制三角函数正弦函数曲线.

MFC 绘制三种不同圆形以及绘制正弦函数曲线 本文使用visual Studio MFC 平台实现绘制单一颜色圆形、渐变颜色边框圆形、渐变填充圆形以及绘制三角函数正弦函数曲线. 关于基础工程的创建请参考 01-Visual Studio 使用MFC 单文档工程绘制单一颜色直线和绘制渐变颜色的直线 02-vis…