当前位置: 首页 > news >正文

谈谈nvm、nrm、pnpm的理解

谈一谈目前用的最多的也是主流的工具nvm、nrm以及pnpm的理解。

nvm

一般我们在公司开发,公司一般可能会有多个项目,可能有新项目也有老项目,不同的前端工程可能依赖的node版本不一样。这个时候就需要我们拥有多个node版本来开发不同的工程,如何安装多个node版本并可以随意的切换我们的node开发环境,这个时候nvm就能完美的发挥出自己的优势。nvm版本过低是不兼容vue3的项目的,我推荐1.1.11版本。当我下载好安装程序后

1,下载之前,先 node -v 查看自己当前的node版本,记下来,然后开始卸载现在你的node(之前node有配环境变量的先清掉相关的环境变量,安装nvm了我们是可以
不用去配环境变量的会自动生成,如果是第一次安装node就不用管这些)
2,首先在D盘盘符下新建一个文件夹 nodeJS
3,然后开始nvm安装,安装过程中第一个路径选择是nvm的安装路径,建议选择D盘盘符下就行或者选择自己集中管理的软件文件夹。
4,第二个路径是安装nodejs的路径,选择上面我让你创建的那个nodeJS文件的路径
5, 下载完成之后,先查看版本进入 cmd窗口(以管理员身份进入),输入 nvm -v 查看版本
//相关的命令
nvm ls //查看node版本列表,及当前使用的版本
nvm install 【node版本号】//下载指定版本的node
nvm use 【你想要切换的node版本号】//切换你想使用的node版本

nrm

一般我们在一些公司可能是内网开发,公司也有自己的vpn,公司的项目中也可能安装一些私有的包,正常情况下我们的node的镜像源是指向taobao的,我们在安装依赖时正常的外网,一些公司私有的包我们是无法安装的,我们需要添加公司的指定的镜像源,并且能同时拥有多个镜像源,能切换使用,方便我们所需要的依赖包都能安装,这个时候nrm就能完美的发挥出自己的优势。

npm install -g nrm //全局安装nrm
nrm ls  // 查看所有的源列表(有*号的表示当前所使用的源)
nrm add [name url] //添加自定义源(name是自定义源的名字,ulr是自定义源的url)
nrm use [name]  // 将npm下载源切换成指定的源
nrm del [name] //删除源

pnpm

随着越来越卷的前端环境,包管理工具也开始玩出了新花样,pnpm也越来越受到广大开发者的喜爱,pnpm相比npm也是有着不少的优势的,首先我们要知道npm包管理包的逻辑,我们一般在安装插件时,插件也有可能依赖别的插件,npm会将这些包拍扁全部安装到node_modules中,node_modules文件目录中结构就非常的乱,然后在大型项目多人开发中,有些插件可能并没有安装过,有些人却能引入(因为node_modules中有)然后使用,开发环境中完全没有影响(俗称幻影依赖),此时我们package.json中却并未声明,然而在项目打包上线后由于package.json中并未声明,这些插件自然获取不到(这其中还没有说到关联版本问题),就会有非常多的问题难以查找。而pnpm是以仓库的形式的管理这些包,package.json中声明过的插件会生成文件链接的仓库,这些文件不占用磁盘空间,而且没有声明过的插件引入时会报错,提示我们安装,这就会避免我们犯错。这也是pnpm越来越被广大开发者推荐使用的原因。

npm install -g pnpm  
//全局安装pnpm就好了,后续使用起来和npm一样,命令中把npm改成pnpm

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • FPGA速度优化
  • 新手该如何选择与小程序定位相关的关键词
  • Yolo环境搭建(深度学习基础环境)
  • 利用优先级队列的堆排序练习
  • visual studio 2005 ( vs2005 , vc2005 ) 编译的应用程序无法运行的解决方案
  • 与PC1显著相关的基因 | p值计算
  • 个人旅游网(1)——数据库表详解
  • JVM1-初识JVM
  • 【cocos creator】养成游戏简易事件系统,每日随机事件,每日行动点重置,根据数据检测多结局
  • 【Unity输入】Input Manager 和 Input System对比
  • 实训第三十二天(学习playbook-roles,脚本创建数据库和表,mycat读写分离)
  • 2024年程序员金九银十面试宝典持续更新中.....
  • 【Spring Boot 3】【Web】同时启用 HTTP 和 HTTPS
  • 命令模式与宏命令:批量操作的高效实现
  • 探索Edge-TTS与WebSocket集成:打造实时语音交互系统
  • 10个确保微服务与容器安全的最佳实践
  • 2017届校招提前批面试回顾
  • 4个实用的微服务测试策略
  • Akka系列(七):Actor持久化之Akka persistence
  • Date型的使用
  • eclipse的离线汉化
  • extract-text-webpack-plugin用法
  • JS基础之数据类型、对象、原型、原型链、继承
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • markdown编辑器简评
  • Next.js之基础概念(二)
  • Object.assign方法不能实现深复制
  • PAT A1120
  • spring security oauth2 password授权模式
  • ubuntu 下nginx安装 并支持https协议
  • vue:响应原理
  • windows-nginx-https-本地配置
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 复杂数据处理
  • 前端之React实战:创建跨平台的项目架构
  • 算法---两个栈实现一个队列
  • 一个JAVA程序员成长之路分享
  • mysql面试题分组并合并列
  • 阿里云ACE认证之理解CDN技术
  • ​​​​​​​开发面试“八股文”:助力还是阻力?
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • $(selector).each()和$.each()的区别
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (C语言)二分查找 超详细
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (Java入门)抽象类,接口,内部类
  • (LeetCode C++)盛最多水的容器
  • (SpringBoot)第二章:Spring创建和使用
  • (苍穹外卖)day03菜品管理
  • (强烈推荐)移动端音视频从零到上手(下)
  • (轉)JSON.stringify 语法实例讲解
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .net core Redis 使用有序集合实现延迟队列