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.Z
	X主版本号(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命令查看官网

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智能优化算法应用:基于蜣螂算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于蜣螂算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于蜣螂算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.蜣螂算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

数据中心:保障企业运营安全可靠的关键

随着人工智能与云计算的爆发,数据中心行业迎来了前所未有的需求增长。然而,这也带来了一系列的挑战。各地政府机构对数据中心建设出台了更为完善和严格的地方标准,企业面临着运营成本高、人才短缺和节能减排等困难。同时,过去频频…

redis 三主三从高可用集群docker swarm

由于数据量过大,单个Master复制集难以承担,因此需要对多个复制集进行集群,形成水平扩展每个复制集只负责存储整个数据集的一部分,这就是Redis的集群,其作用是提供在多个Redis节点间共享数据的程序集。 官网介绍地址 re…

理解基于 Hadoop 生态的大数据技术架构

转眼间,一年又悄然而逝,时光荏苒,岁月如梭。当回首这段光阴,不禁感叹时间的匆匆,仿佛只是一个眨眼的瞬间,一年的旅程已成为过去,而如今又到了画饼的时刻了 ! 基于 Hadoop 生态的大数…

msvcp100.dll丢失的常见原因/msvcp100.dll丢失的解决方法分享

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“msvcp100.dll丢失”。这个错误提示通常出现在运行某些程序或游戏时,给使用者带来了很大的困扰。那么,究竟是什么原因导致了msvcp100.dll文件的丢失呢?本…

【Fastadmin】利用 build_select 做一个树状下拉选择框

1.效果展示 系统crud生成的下拉分类有些不是很好看,并且选择困难,看不出级差,效果如下: 经过 build_select 加工后的效果,美观好看,并添加上搜索功能: 2. 首先需要写一个树状图的数据格式 protected $datalist []; pu…

集合贴——问答引擎

1.FAQ问答引擎 FAQ问答引擎是一种传统的问答机器人引擎,它基于NLP算法研发,为用户提供高泛化性、灵活拓展的QA对匹配引擎。FAQ通常以{1条标准问 1 条标准答案 n条相似问}的结构将语料存储在FAQ语料库中(如mysql、ElasticSearch&#xff09…

# K近邻算法 度量距离

K近邻算法 度量距离 欧氏距离(Euclidean distance) 欧几里得度量(euclidean metric)(也称欧氏距离)是一个通常采用的距离定义,指在 m m m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。在二维和三维空间中的欧氏距离就是两点…

电商平台商品销量API接口,30天销量API接口接口超详细接入方案说明

电商平台商品销量API接口的作用主要是帮助开发者获取电商平台上的商品销量信息。通过这个接口,开发者可以在自己的应用或网站中实时获取商品的销量数据,以便进行销售分析、库存管理、市场预测等操作。 具体来说,电商平台商品销量API接口的使…

如何用c语言来判断素数

首先要知道什么是素数,就是素数的定义,素数一般指质数。质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。然后我们以100到200以内的数字来举例。 先用穷举法的思想,来把100到200的数字一个一个的列举出来&a…

[ 蓝桥杯Web真题 ]-Markdown 文档解析

目录 介绍 准备 目标 规定 思路 补充知识 解法参考 介绍 Markdown 因为其简洁的语法大受欢迎,已经成为大家写博客或文档时必备的技能点,众多博客平台都提倡用户使用 Markdown 语法进行文章书写,然后再发布后,实时的将其转化…

Meta开源最大多模态视频数据集—Ego-Exo4D

社交、科技巨头Meta联合15所大学的研究机构,经过两年多的努力发布了首个多模态视频训练数据集和基础套件Ego-Exo4D,用于训练和研究AI大模型。 据悉,该数据集收集了来自13个城市839名参与者的视频,总时长超过1400小时,包含舞蹈、足球、篮球、…

keepalived+lvs 对nginx做负载均衡和高可用

LVS_Director KeepAlivedKeepAlived在该项目中的功能: 1. 管理IPVS的路由表(包括对RealServer做健康检查) 2. 实现调度器的HA http://www.keepalived.orgKeepalived所执行的外部脚本命令建议使用绝对路径实施步骤: 1. 主/备调度器…

在线人数(oj题)

题目不少于5个字,所以整了个括号凑字数 首先我想到的是用一个数组来记录每一秒的在线人数 但是即使是short类型(2字节),也会用到60 * 60 * 24 * 30 * 12 * 60 * 2 / 1024 / 1024 3,559.5703125 MB 而题目上限是256MB&#xff0…

Echarts饼图中显示百分比

开发中遇到一个需求,要在饼图上显示数据百分比,下图: 查了echarts 文档,并不能通过简单的配置来实现,原因如下:在单个serie的label中,只能设置一个label,位置可以选择在饼图内部inne…

SAP UI5 walkthrough step5 Controllers

在这个章节&#xff0c;我们要做的是&#xff0c;将之前的text文本展示为一个按钮&#xff0c;并将声明绑定在点击按钮事件。 因为改的是外观&#xff0c;所以我们修改的是view.XML webapp/view/App.view.xml <mvc:ViewcontrollerName"ui5.walkthrough.controller.A…

20231207_最新已测_Centos7.4安装nginx1.24.0_安装详细步骤---Linux工作笔记066

以前安装的太模糊了,干脆重新写一个: 1.首先下载对应的nginx-1.24.0.tar.gz安装文件 2.然后: 去执行命令 安装依赖 yum install -y gcc yum install -y pcre pcre-devel yum install -y zlib zlib-devel yum install -y openssl openssl-devel 3.然后:去解压 tar -zxvf ngi…

ai人工智能洗稿软件免费有哪些好用?【最新AI洗稿软件盘点】

在当今信息时代&#xff0c;内容创作已成为人们工作和生活中不可或缺的一部分。为了提高创作效率&#xff0c;越来越多的人转向人工智能洗稿软件。本文将专心分享一些优质的免费AI洗稿软件。 免费AI洗稿软件的崛起 免费AI洗稿软件的崛起为许多创作者带来了便利&#xff0c;使他…

市面上主流的测评补单方式有几种?以及优缺点

目前测评方式分为了三大类&#xff1a; 一、找服务商 有些服务商手上确实有大量的国外测评人员&#xff0c;但是服务商鱼龙混杂&#xff0c;账号质量也是良莠不齐的&#xff0c;真人测评很多也是通过脚本来留Review&#xff0c;这已经是测评圈中公开的秘密了。由于listing很容…

MeteoInfo-Java解析与绘图教程

MeteoInfo-Java解析与绘图教程(四) 上文我们说到,将地图叠加在色斑图上,但大部分都是卫星绘图,现在开始讲解micaps数据绘图,同样也是更多自定义 配置 首先我们解析micaps数据,将之前学到的东西拿过来绘图 MeteoDataInfo meteoDataInfo new MeteoDataInfo(); meteoDataInfo.o…