nrm、yrm镜像源管理工具使用说明

546 阅读3分钟

nrm、yrm 是 个镜像源管理工具,它可以帮助用户在不同的镜像源源之间快速切换,提高下载速度和获取更新可以快速的切换 npm 、yarn的镜像源。

一、nrm 使用说明

1、nrm安装和常用指令

全局安装

npm install -g nrm
  • 查看 nrm 所有的镜像源地址 nrm ls;带*号的是当前使用源

  npm ---------- https://registry.npmjs.org/
  yarn --------- https://registry.yarnpkg.com/
  tencent ------ https://mirrors.cloud.tencent.com/npm/
  cnpm --------- https://r.cnpmjs.org/
* taobao ------- https://registry.npmmirror.com/
  npmMirror ---- https://skimdb.npmjs.com/registry/

nrm 常用命令

nrm -h /nrm -help  // 列出nrm的相关命令、信息
nrm -V             // nrm版本
nrm ls             // 列出nrm所有的镜像源地址
nrm current        // 当前使用镜像源

nrm use <registry> // 使用某个镜像源 例如 : nrm use taobao
nrm add <registry> <url> [home]   //增加镜像源;registry镜像源名;url 镜像源地址
nrm del <registry>  // 删除对应的源。
nrm test <registry>  //测试镜像源下载响应时间

2、nrm 安装 执行命令报错解决方案

nrm v1.2.1 版本可能会出现以下相关问题

  • 报错 : internal/validators.js:124 throw new ERR_INVALID_ARG_TYPE(name, ‘string’, value);
//找到nrm/cli.js  17行 改成

//const NRMRC = path.join(process.env.HOME, '.nrmrc');  ( 源代码注释 )
const NRMRC = path.join(process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME'], '.nrmrc');  //修改后结果

  • 报错 throw new TypeError('Path must be a string. Received ’ + inspect(path));
//同上
  • 报错 node_global\node_modules\nrm\node_modules\open\index.js:38
  • } catch {}
  • ^
//nrm/node_modules/open/index.js ;将38行、 180行的catch{} 改成  catch(e) {}

nrm v1.2.5 版本可能会出以下相关问题

  • nrm ls 不显示星号问题,nrm current 不显示问题
//初次下载nrm使用nrm ls打印地址列表是不显示星号的,
//使用nrm use taobao时,文件.nrmrc是空的,所以hasOwnProperty(customRegistries, name) && (name in registries || customRegistries[name].registry === registry.registry)判断是不成立的

//nrm/cli.js   第211行 改成
// if (hasOwnProperty(customRegistries, name) && (name in registries || customRegistries[name].registry === registry.registry)) {
    //registry[FIELD_IS_CURRENT] = true;
	//   customRegistries[name] = registry;
// }
    registry[FIELD_IS_CURRENT] = true;
    customRegistries[name] = registry;


//改完之后重新use以下就好

  • 报错信息 : const open = require('open'); ^ Error [ERR_REQUIRE_ESM]: require() of ES Module ,该错误是由于 nrm 依赖的 open 模块从 v9.0.0 开始改为纯 ES Module 规范,而 nrmcli.js 仍使用 CommonJS 的 require() 语法加载该模块,导致兼容性冲突

解决如下 :

安装兼容的 open@8.4.2,此版本支持 require() 语法

npm install -g open@8.4.2 --save

或者修改 nrm 源码(临时方案)

编辑 cli.js 文件,将 r修改 nrm 源码(临时方案)equire 改为动态 import()

//D:\ProgramDevelop\nvm\node_global\node_modules\nrm\cli.js
//修改第9行代码:
const open = require('open');
// 改为
const open = await import('open').then(m => m.default);

二、yrm 使用说明

1、yrm安装和常用指令

全局安装

npm install -g yrm
  • 查看 yrm 所有的镜像源地址 yrm ls;带*号的是当前使用源

  npm ---- https://registry.npmjs.org/
  cnpm --- http://r.cnpmjs.org/
* taobao - https://registry.npmmirror.com/
  nj ----- https://registry.nodejitsu.com/
  rednpm - http://registry.mirror.cqupt.edu.cn/
  npmMirror  https://skimdb.npmjs.com/registry/
  edunpm - http://registry.enpmjs.org/
  yarn --- https://registry.yarnpkg.com

yrm 常用命令

yrm -h /nrm -help  // 列出yrm的相关命令、信息
yrm -V             // yrm版本
yrm ls             // 列出yrm所有的镜像源地址
yrm current        // 当前使用镜像源

yrm use <registry> // 使用某个镜像源 例如 : yrm use taobao
yrm add <registry> <url> [home]   //增加镜像源;registry镜像源名;url 镜像源地址
yrm del <registry>  // 删除对应的源。
yrm test <registry>  //测试镜像源下载响应时间

三、nrm、yrm 对比分析

核心定位差异

工具支持工具链同步能力典型用户
nrm仅管理 npm 源仅修改 .npmrc 文件纯 npm 或无需同步 yarn 的项目
yrm支持 npm + yarn自动同步更新 .npmrc.yarnrc混合使用 npm/yarn 的工程环境

使用场景建议

  1. 纯npm项目:nrm足够轻量,适合单一工具链场景
  2. 混合开发环境:运行一次 yrm 可以同时更换 npm 和 yarn 的镜像源,方便快速,yrm可避免npm/yarn配置不一致问题
  3. 企业级部署
    • 使用yrm统一管理内网源
    • 通过yrm add self-registry http://xxx添加私有源