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

news2025/2/23 4:09:46

转载说明

原文地址

简介

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命令查看官网

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

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

相关文章

Java jdk和jre的区别

jdk和jre的区别为:JRE是java运行时环境而JDK是java开发工具包,JDK包含JRE,但是JRE可以独立安装。 JDK: java development kit (java开发工具),JDK 是用于开发 Java 程序的最小环境。 JRE: java runtime e…

视频推拉流直播点播EasyDSS平台点播文件加密存储的实现方法

视频推拉流直播点播系统EasyDSS平台,可提供流畅的视频直播、点播、视频推拉流、转码、管理、分发、录像、检索、时移回看等功能,可兼容多操作系统,还能支持CDN转推,具备较强的可拓展性与灵活性,在直播点播领域具有广泛…

uniapp实现拨打电话跳转手机拨号界面 (ios和安卓通用)

效果展示:左边为安卓系统展示,右边为ios系统展示 代码: toPhone(){uni.makePhoneCall({phoneNumber: "10086", //要拨打的手机号success: (res) > {// console.log("调用成功")},fail: (res) > {// console.log(调…

Web安全-初识SQL注入(一)

1、初识SQL注入 1.1、什么是注入? 将不受信任的数据作为命令或查询的一部分发送到解析器时,会产生诸如SQL注入、NoSQL注入、OS 注入和LDAP注入的注入缺陷。攻击者的恶意数据可以诱使解析器在没有适当授权的情况下执行非预期命令或访问数据。 注入能导…

JOSEF约瑟 同步检查继电器DT-13/200 100V柜内安装,板前接线

系列型号 DT-13/200同步检查继电器; DT-13/160同步检查继电器; DT-13/130同步检查继电器; DT-13/120同步检查继电器; DT-13/90同步检查继电器; DT-13/254同步检查继电器; 同步检查继电器DT-13/200 100V柜内板前接线 一、用途 DT-13型同步检查继电器用于两端供电线路的…

构建高效预约系统:预约系统源码的设计与实现

随着社会的不断进步,预约系统在各个领域的应用愈发广泛。为了满足不同行业的需求,设计高效的预约系统源码至关重要。在本文中,我们将深入研究预约系统的设计原则,并提供一些关键的技术代码示例,帮助读者更好地理解如何…

怎么使用AI写作工具批量写作?批量AI智能写作的方法

随着科技的不断发展,人工智能(AI)技术在各个领域都有了广泛的应用,其中之一就是智能写作。对于需要大量文本创作的用户来说,批量AI智能写作成为提高效率的一项重要工具。本文将专心分享批量AI智能写作的方法、工具以及…

分享116个图片JS特效,总有一款适合您

分享116个图片JS特效,总有一款适合您 116个图片JS特效下载链接:https://pan.baidu.com/s/1WvUvmG1adR2EJG97MiGj3A?pwd6666 提取码:6666 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,收集整…

t-SNE方法:

使用t-SNE时,除了指定你想要降维的维度(参数n_components),另一个重要的参数是困惑度(Perplexity,参数perplexity) 困惑度: 困惑度大致表示如何在局部或者全局位面上平衡关注点&am…

【稳定检索|投稿优惠】2024年光电信息与机器人发展国际会议(ICOIRD 2024)

2024年光电信息与机器人发展国际会议(ICOIRD 2024) 2024 International Conference on Optoelectronic Information and Robot Development(ICOIRD 2024) 一、【会议简介】 信息技术与人工智能的浪潮正在激荡,不断刷新我们生活的页面,深刻烙印在光电信息…

西安安泰Aigtek——ATA-8152射频功率放大器

ATA-8152射频功率放大器简介 ATA-8152是一款射频功率放大器。其P1dB输出功率100W,饱和输出功率200W。增益数控可调,一键保存设置,提供了方便简洁的操作选择,可与主流的信号发生器配套使用,实现射频信号的放大。宽范围供…

【每日一题】到达首都的最少油耗

文章目录 Tag题目来源题目解读解题思路方法一:贪心深搜 写在最后 Tag 【递归/深度优先搜索】【树】【2023-12-05】 题目来源 2477. 到达首都的最少油耗 题目解读 每个城市都有一位代表需要前往城市 0 进行开会。每个城市都有一辆座位数为 seats 的汽车&#xff0…

高温老化房稳定性、应用领域

高温老化房控制系统的稳定性主要有四点: 1. 温度控制:控制系统确保老化室内的温度在整个老化试验过程中保持稳定并在期望的范围内。这种稳定性对于准确可靠的测试结果至关重要。 2. 湿度控制:控制系统同时保持老化室内湿度水平稳定。这一点很重要,因为某些材料或产…

gitlab高级功能之mirroring - pull mirroring(二)

上一篇详细介绍了mirroring的push功能,本篇给大家介绍下mirroring的pull功能的使用。 文章目录 1. pull mirroring1.1 介绍1.2 工作方式 2. 配置拉取镜像2.1 基于https的方式step1: 选择远程gitlab所在的项目和获取tokenstep2: 配置本地gitlabstep3: 验证 2.2 基于s…

大文本限制录入文字后通过输入法鼠标单击还可继续超限额录入问题

textInpEl.on(keyup propertychange, "textarea", function () { var realMaxLength $(this).parent().parent().find(".maxNum").text(); //真实的最大长度 var endFontLen $(this).val().length; if (endFontLen < rea…

两电脑共享鼠标键盘方案

一开始使用的是shareMouse 但是需要注册还有很多不稳定问题 后来想买个双拷线&#xff0c;又太贵&#xff0c;感觉不值的。 再后来&#xff0c;发现微软有自己的系统上的 共享方案 &#xff0c;叫做 Mouse without Borders ,而且是免费的&#xff0c;只能在window电脑上使用…

数据结构——希尔排序(详解)

呀哈喽&#xff0c;我是结衣 不知不觉&#xff0c;我们的数据结构之路已经来到了&#xff0c;排序这个新的领域&#xff0c;虽然你会说我们还学过冒泡排序。但是冒泡排序的性能不高&#xff0c;今天我们要学习的希尔排序可就比冒泡快的多了。 希尔排序 希尔排序的前身是插入排…

二叉树链式结构的实现——C语言

目录 一、提前说明 二、二叉树的遍历 2.1前序遍历 2.2中序遍历 2.3后序遍历 2.4代码 三、二叉树结点个数 3.1整体思路 3.2代码 四、二叉树叶子结点个数 4.1整体思路 4.2代码 五、二叉树的高度(深度) 5.1整体思路 5.2代码 六、二叉树第k层节点个数 6.1整…

天津python培训课程,普通人学python有用吗?

选择一个正确的行业对于个人的发展至关重要&#xff0c;在当今时代&#xff0c;IT行业高薪的特点吸引了越来越多的人转行“入坑”&#xff0c;而作为目前的热门编程语言&#xff0c;python也是很多人转行的选择。 Python培训学费选择 python培训班学费可能会因为培训机构所在…

利用document.write阻塞js文件加载

脚本加载失败如何重试【渡一教育】_哔哩哔哩_bilibili 注意需要添加3个转义符 利用document.write加载js的好处是会阻塞后续的js记载,必须等待当前js加载并执行完毕后,才会加载后续的js文件,保证了顺序性