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