NRM 使用笔记

419 阅读1分钟

NRM 使用笔记

1. 为什么使用 nrm

为了方便切换不同npm镜像源
比如有个项目是基于npm官方镜像的,另一个项目基于cnpm; 这样不同项目更新依赖需要通过npm config set registry <path>来切换比较麻烦。

2. 安装使用

# 全局安装
npm install -g nrm
# 新增公司的仓库地址
nrm add myCompany https://work.company.com/repository/npm/

Windows 下使用会报错:

# 尝试新增一个镜像地址
nrm add myCompany https://work.company.com/repository/npm/
# 抛出如下错误
internal/validators.js:124
    throw new ERR_INVALID_ARG_TYPE(name, 'string', value);
    ^

[TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received undefined
  at validateString (internal/validators.js:124:11)
  at Object.join (path.js:402:7)
  # 直接定位这个文件修改源码
  at Object.<anonymous> (C:\Users\10306\AppData\Roaming\nvm\v14.17.0\node_modules\nrm\cli.js:17:20)
  at Module._compile (internal/modules/cjs/loader.js:1068:30)
  at Object.Module._extensions..js (internal/modules/cjs/loader.js:1097:10)
  at Module.load (internal/modules/cjs/loader.js:933:32)
  at Function.Module._load (internal/modules/cjs/loader.js:774:14)
  at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
  at internal/main/run_main_module.js:17:47
] {
  code: 'ERR_INVALID_ARG_TYPE'
}

定位到C:\XXX\XXX\AppData\Roaming\nvm\v14.17.0\node_modules\nrm\cli.js:17:20,修改源码:

// const NRMRC = path.join(process.env.HOME, '.nrmrc');
const NRMRC = path.join(process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME'], '.nrmrc');

保存以后就可以正常使用 nrm 功能:

# 1. 新增一个镜像
nrm add myCompany https://work.company.com/repository/npm/
# 输出以下内容表示添加成功
  add registry myCompany success

# 2. 查看所有镜像
nrm ls
# 输出以下内容可以看到所有地址 标注*的表示当前环境使用
  npm -------- https://registry.npmjs.org/
  yarn ------- https://registry.yarnpkg.com/
  cnpm ------- http://r.cnpmjs.org/
* taobao ----- https://registry.npm.taobao.org/
  nj --------- https://registry.nodejitsu.com/
  npmMirror -- https://skimdb.npmjs.com/registry/
  edunpm ----- http://registry.enpmjs.org/
  myCompany ------ https://work.company.com/repository/npm/

# 3. 切换镜像
nrm use myCompany
# 输出以下表示切换成功哦
  Registry has been set to: https://work.company.com/repository/npm/

切换完成后就可以在项目中执行npm i来安装私服的依赖包了。 将来想要使用 npm 官方镜像的库创建项目,只需在创建前执行nrm use npm即可。

The End. Posted by Jimmy Gu, 8/16.