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.rhkb.cn/news/210872.html

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

相关文章

前端时间的失败总结复盘

分享失败经验,前段时间的总结复盘: 与伙伴合作面对异常决策要及时提出质疑,怼,别太客气,客气起来,小心翼翼在意他人情绪那么这个项目就会让人难受,不要因为因为伙伴身上有标签/光环/权威就觉得…

java后端自学错误总结

java后端自学错误总结 MessageSource国际化接口总结 MessageSource国际化接口 今天第一次使用MessageSource接口,比较意外遇到了一些坑 messageSource是spring中的转换消息接口,提供了国际化信息的能力。MessageSource用于解析 消息,并支持消息的参数化…

题目:区间更新(蓝桥OJ 3291)

题目描述&#xff1a; 解题思路&#xff1a; 差分模板题。 题解&#xff1a; #include<bits/stdc.h> using namespace std;const int N 1e5 10; int a[N], diff[N] ;//数组的大小不可能开到大于1e9int res(int n, int m) {for(int i 1; i < n; i)cin >&g…

抖音视频如何无水印保存?抖音视频无水印保存教程

抖音视频如何无水印保存&#xff1f;当下短视频盛行时代&#xff0c;抖音作为当下主流短视频平台之一&#xff0c;每天都有数以亿计的用户在抖音上分享自己的创作&#xff0c;然后当我们遇到感兴趣的视频&#xff0c;下载保存后会发现带有水印&#xff0c;那么抖音视频如何无水…

人、机不同在于变与多

人擅长变&#xff0c;如变模态、变尺度&#xff0c;而机器侧重多&#xff0c;如多模态、多尺度。 人类擅长变化的能力是由于我们的大脑和思维能力的灵活性所决定的。我们可以通过学习和适应&#xff0c;改变我们的态度、行为方式和观点&#xff0c;以适应不同的情境和环境。例如…

51 代码审计-PHP框架MVC类上传断点调试挖掘

目录 知识点1:知识点2:知识点3:演示案例:PHPStormxdebu断点调试演示Beescms无框架后台任意文件上传Finecms基于前台MVC任意文件上传CItphp基于前台TP5框架任意文件上传 涉及资源: 知识点1: #关键字搜索: (函数&#xff0c;关键字&#xff0c;全局变量等) 文件上传&#xff0c;…

国标GB28181协议/RTSP视频监控汇聚平台EasyCVR(V.3.4)页面UI大更新

为提高用户体验&#xff0c;增强平台功能&#xff0c;旭帆科技的Easy系列平台也在不断优化更新中。在最新的EasyCVR&#xff08;V.3.4&#xff09;中&#xff0c;其最显著的区别即为首页UI的调整。 其亮点是在【配置中心】-【基础配置】-【展示信息】中&#xff0c;首页UI可分…

短视频账号矩阵系统源码/saas独立源头技术开发

一、批量剪辑&#xff08;采用php语言&#xff0c;数学建模&#xff09; 短视频合成批量剪辑的算法主要有以下几种&#xff1a; 1. 帧间插值算法&#xff1a;通过对多个视频的帧进行插帧处理&#xff0c;从而合成一段平滑的短视频。 2. 特征提取算法&#xff1a;提取多个视频中…

Spring容器启动过程中的自定义操作插口汇总

目录标题 PostConstruct注解EventListener方式InitializingBean的afterPropertiesSet方法实现ApplicationRunner接口重写run方法实现AplicationContextAware接口重写setApplicationContext实现ServletContextListener接口contextInitialized方法实现ServletContextAware接口set…

MacDroid Pro for Mac – 安卓设备文件传输助手,实现无缝连接与传输!

想要在Mac电脑上轻松管理和传输您的安卓设备文件吗&#xff1f;MacDroid Pro for Mac 是您的最佳选择&#xff01;这款强大的文件传输助手可以让您在Mac上与安卓设备之间实现快速、方便的文件传输。 MacDroid Pro for Mac 提供了简单易用的界面&#xff0c;让您能够直接在Mac上…

WordPress插件大全-免费的WordPress插件汇总

随着互联网的不断发展&#xff0c;网站建设变得日益普及。对于大多数人而言&#xff0c;WordPress是一个熟悉且易于使用的网站建设平台。然而&#xff0c;有时候我们可能会觉得WordPress的功能还不够满足我们的需求&#xff0c;这时候&#xff0c;插件就成了解决问题的得力工具…

数据库管理-第122期 配置Halo数据库(202301204)

数据库管理-第122期 配置Halo数据库&#xff08;202301204&#xff09; 在120期完成了HaloDB的安装&#xff0c;那么紧接着就需要对数据库进行具体配置。 1 数据库配置 这里首先说一下我这里数据库的给的硬件配置&#xff1a;2个CPU&#xff0c;16GB内存 1 配置数据库访问控…

记录一下Mac配置SpringBoot开发环境

由于很多项目喜欢使用传统的 Java 8 进行开发&#xff0c;而且 Java 8 的稳定性也是经过长久考验的&#xff0c;我们接下来就尝试一下&#xff0c;在一台新的 Mac 中配置 Java 环境&#xff0c;并且开始创建 SpringBoot 项目。 首先&#xff0c;去 Oracle 官网下载 java8 JDK …

通过时间交织技术扩展ADC采样速率的简要原理

前言 数据采集是将自然界中存在的模拟信号通过模数转换器&#xff08;ADC&#xff09;转换成数字信号&#xff0c;再对该数字信号进行相应的接收和处理。数据采集系统作为数据采集的手段&#xff0c;在移动通信、图向采集、无线电等领域有重要作用。随着电子信息技术的飞速发展…

感冒 发烧 咳嗽记录

感冒 风寒: 清鼻涕 热感冒: 细菌记录, 脓鼻涕. 咳嗽 先是清痰咳嗽, 后是浓痰,细菌感染, 白细胞噬菌体, 所以要补充蛋白质,维生素. 胸骨上窝 , 天突穴 ,后面上支气管的位置, 往下会变成左右两支,连接到肺部 普通咳嗽: 用哈气拍打背部的方式. 把痰去除. 吃点 盐酸氨溴索片 增加支…

怎么让百度快速收录,百度SEO收录工具

百度收录对于一个网站的重要性不言而喻。拥有良好的百度收录意味着网站能够更好地被搜索引擎收录&#xff0c;为用户提供更精准的搜索结果。而怎样实现百度快速收录成为了许多网站管理员关注的焦点。 百度收录的重要性 百度是国内最大的搜索引擎之一&#xff0c;拥有数以亿计的…

蓝桥杯真题:四平方和-Java版

import java.io.*;/*先找后两个数for(int i 0; 2 * i * i < n;i)for(int j i; i * i j * j < n;j ) 再找前两个数 for(int i 0;4 * i * i < n; i )for(int j i;2 * (j * j i * i) < n;j )//这样就可以让后两个数尽量大,前两个数尽量小 这样就可以确定后…

题目:小明的彩灯(蓝桥OJ 1276)

题目描述&#xff1a; 解题思路&#xff1a; 一段连续区间加减&#xff0c;采用差分。最终每个元素结果与0比较大小&#xff0c;比0小即负数输出0。 题解&#xff1a; #include<bits/stdc.h> using namespace std;using ll long long; const int N 1e5 10; ll a[N],…

TrustZone之虚拟地址空间

在本系列中的内存管理指南介绍了多个虚拟地址空间或translation regimes的概念。例如&#xff0c;有一个用于EL0/1的translation regime&#xff0c;还有一个用于EL2的独立translation regime&#xff0c;如下所示&#xff1a; 还有专门的翻译方案用于安全状态和非安全状态。例…

Django HMAC 请求签名校验与 Vue.js 实现安全通信

概要 在 Web 应用的开发过程中&#xff0c;确保数据传输的安全性和完整性是一个不容忽视的问题。使用 HMAC&#xff08;Hash-based Message Authentication Code&#xff09;算法对请求内容进行签名校验&#xff0c;是一种常见且有效的安全策略。本文将详细介绍如何在 Django …