JavaScript is required
Blog About Online 🎬

npm与nrm协助共进

2024/09/23
5 mins read
See this issue
# 陈年老博客
# npm package
Back

前沿,我们介绍了一波 Node与NVM的约会,这次再来看看npm内的源管理与如何给我们带来更便捷的多项目时依赖切换

NRM,官方是这样说的:(NPM registry manager)是 npm 的镜像源管理工具,使用它可以快速切换 npm 源。

什么是npm的镜像源呢?其实我们之前也有介绍过的 说一下安装依赖包时所遇到常见问题的快速处理方式 ,其中若我们未进行:

npm config set registry xxxxx

等操作时,该registry(即为npm镜像源,可以理解为npm包依赖获取地址仓库)的默认源是node官方提供的源地址:

https://registry.npmjs.org/

可以看到,上面的https://registry.npmjs.org/ 就是所谓的镜像源,其实无非就是依赖仓库中心,所有的依赖插件都在此进行搜down下来(理解maven的家人们,可以对应为maven异曲同工)

但是呢,由于国内的网络环境问题,导致官方的默认源是有点难访问成功的,大部分依赖拉取成功的概率五五开…再少一点吧…不信么?那接着造,看一下,如果我们以正常的国内地址去跟他握个手,看看会有多fuck蛋 image 这样一看,wo cao

那看到了,怎么说?简单,几个方式:
  1. 挂 V X N,走国外代理,懂得都懂;
  2. 不用npm,走cnpm;
  3. 给npm挂代理,使其走国内的某些大厂的源地址;(推荐

呐,方式都给出来,这里我给大家走推荐的方式,即为:

npm config set registry xxxxx

没错,这个就是给npm挂代理,使其走国内源(文末提供阿D所知道的国内大厂源),或其他私有源,比如大名鼎盛的 taobao 阿里源,给各位看官看下区别: image

阿D无语…

竟然知道了关于源代理的设置,那OK,完事~

别别,别急着走嘛帅哥~ 再给各位帅哥靓女安利个好东西,回归本主题,当多项目使用时,我们难道一直要这样敲来敲去,npm config set regxxxxxxxx…吗?

那显然很烦人,nrm给我们带来了极大的便利,若果后期地址源一长,你还愿意去记么?

废话少说,开冲:

<!-- 1、全局安装(你别跟我说npm怎么装好吧) -->
npm i nrm -g

<!-- 2、检测是否安装完成 -->
nrm -v     -- 成功输出版本号,如:1.x.x,即代表安装成功

<!-- 3、如何使用 -->
nrm -- 查看所有命令配置方式

其中:
nrm ls(查看当前nrm所有已配置源,且当前正在使用的源前面会标有*号,具体看下图展示);
nrm current(当前所使用的源名称);
nrm use <源名称>(*使用指定源,如:nrm use taobao);
nrm add <源名称> <源地址>(添加第三方源或添加私有源,如:nrm add taobao https://registry.npmmirror.com/);
nrm del <源名称>(删除指定源,如:nrm del taobao);
nrm set-scope <依赖的scopeName> <源地址>(设置部分依赖走指定源,如:nrm set-scope xdd@xxx taobao,标识xdd范围的依赖,直走这个源);
nrm del-scope <依赖的scopeName>(删除部分依赖走指定源配置,如:nrm del-scope xdd@xxx)

ps:注意下各位,最新版(1.2.5及以上)的nrm由于内部open版本依赖包模块没有锁,用的是最新版本,而最新版本的open依赖用的是esm规范,所以需要对nrm的依赖open做一下降级操作:

npm i nrm -g [email protected] --save

否则会出现以下这种:

image

处理好以上问题后,正常显示如下:

image

这里面,nrm给我们做了什么事情呢?其实关键的就是 nrm use的步骤,给我们省去了npm config set registry xxxxxx等一大段的键盘工程,这也是一个简化操作,简化即为效率,OK,这一期的安排就到此结束吧~


其他大厂公开源补充:

1. 淘宝源(https://registry.npmmirror.com/) 2. 腾讯源(https://mirrors.cloud.tencent.com/npm/) 3. 华为云源(https://repo.huaweicloud.com/repository/npm/) 4. 中科大源(https://npmreg.proxy.ustclug.org/) 5. 清华大学源(npm源已挂,其他源可详看)

PS:给各位再补录一个坑,如果当前项目下使用了.npmrc文件的话,并且里面配置了默认的registry,那么当前项目下nrm use xxx是无法生效的,他是只会以.npmrc文件中配置的registry为作用使用(因为该配置的方式为最高权限,权重最大)