值得推荐的Node镜像切换工具NRM

开发 开发工具
Nrm 是 Node.js 的镜像管理小工具,可以方便地查看镜像源列表和管理这些镜像源,并且可以快速地切换到最适合当前网络环境的镜像源。

背景

很多开发者会遇到这样的情况,Node安装包的时候,国内镜像源有些包安装不上,需要更换为淘宝镜像源,而有些包在淘宝镜像源又下载不到,导致需要每次重新设置镜像源,以至于下次都不知道当前使用的哪个镜像源故该管理工具出现,极大便利了我们的开发

1、nrm 介绍

nrm 是 Node.js 的镜像管理小工具,可以方便地查看镜像源列表和管理这些镜像源,并且可以快速地切换到最适合当前网络环境的镜像源。

2、安装

全局安装  npm i nrm -g。

3、常用命令

「查看」当前可用的镜像源列表:nrm ls。

图片

「切换」镜像源 :nrm use <registry> 或  nrm use <url>。

  • <registry> 是镜像源名称,<url> 是镜像源的地址。
  • 例如切换到淘宝:nrm use taobao 或  nrm use https://registry.npm.taobao.org/。

「添加」新的镜像源:nrm add <registry> <url>。

  • 例如:nrm add test http://test.com/。

「删除」镜像源 :nrm del <registry>。

「测试」镜像源速度:nrm test。

「显示」当前使用的镜像源:nrm current。

  • 查看源列表时,当前源的名称前面带*号,也可以用于查看当前镜像源。

打开指定镜像源的「网站首页」:nrm home <registry>。

显示 nrm 命令的「帮助信息」:nrm help。

4、常见报错

nrm ls 报错如下:

图片

原因:由于 nrm 的依赖模块 open 采用的是 ES Module 的方式,但是 nrm 自身是一个 CommonJS 模块,无法直接加载 ES Module 的依赖。

解决:先注释掉报错文件的第9行(按照路径查找文件,如果使用的编辑器终端可以用 ctrl + 鼠标左键 点击报错文件直接跳转),再将 require('open') 改为 import('open'),具体修改如下:

// 找到 onHome 函数并修改
// 源代码
function onHome (name, browser) {
var allRegistries = getAllRegistry();
var home = allRegistries[name] && allRegistries[name].home;
if (home) {
var args = [home];
if (browser) args.push(browser);
open.apply(null, args);
}
}

// 修改为
function onHome(name, browser) {
var allRegistries = getAllRegistry();
var home = allRegistries[name] && allRegistries[name].home;
if (home) {
var args = [home];
if (browser) args.push(browser);
import('open')
.then((module) => {
var open = module.default;
open(...args);
})
.catch((error) => {
console.error(error);
});
}
}

nrm ls  显示镜像源列表后,当前源的前面不带* 号。

  • 再次打开刚才的cli.js文件,修改代码如下,把&&修改为||,具体如下:
// 源代码
config(attrs, registry).then(() => {
console.log(' ');
const newR = npm.config.get(FIELD_REGISTRY);
var customRegistries = getCustomRegistry();
Object.keys(customRegistries).forEach(key => {
delete customRegistries[key][FIELD_IS_CURRENT];
});
if (hasOwnProperty(customRegistries, name) && (name in registries || customRegistries[name].registry === registry.registry)) {
registry[FIELD_IS_CURRENT] = true;
customRegistries[name] = registry;
}
setCustomRegistry(customRegistries);
printMsg(['', ' Registry has been set to: ' + newR, '']);
}).catch(err => {
exit(err);
})

// 修改后
config(attrs, registry).then(() => {
console.log(' ');
const newR = npm.config.get(FIELD_REGISTRY);
var customRegistries = getCustomRegistry();
Object.keys(customRegistries).forEach(key => {
delete customRegistries[key][FIELD_IS_CURRENT];
});
if (hasOwnProperty(customRegistries, name) || (name in registries || customRegistries[name].registry === registry.registry)) {
registry[FIELD_IS_CURRENT] = true;
customRegistries[name] = registry;
}
setCustomRegistry(customRegistries);
printMsg(['', ' Registry has been set to: ' + newR, '']);
}).catch(err => {
exit(err);
})


责任编辑:姜华 来源: CoderXing
相关推荐

2022-06-28 10:50:21

ElectronHosts

2020-01-02 14:25:50

工具代码开发

2022-08-31 14:06:02

RPA工具人工智能

2020-06-08 14:19:24

DevOps自动化工具

2020-01-29 19:34:57

工具黑客语音合成

2024-04-22 15:00:00

AIAI辅助编程工具开发

2021-07-05 09:40:57

工具Node开源

2021-02-07 09:00:00

PostgreSQL数据库工具

2018-11-01 08:49:28

数据科学数据科学工具数据分析

2021-08-10 08:00:00

微服务开发工具

2022-11-28 11:31:37

2024-03-27 14:32:47

图像标注开源机器学习

2018-09-01 05:06:37

2022-11-25 08:00:00

人工智能工具Grammarly

2021-10-18 09:00:00

Kubernetes容器工具

2021-04-07 09:00:00

Web工具漏洞

2019-12-12 11:53:13

安全工具网络安全网络攻击

2021-08-02 09:00:00

DevOps工具开发

2020-12-11 09:00:00

物联网安全工具

2018-11-05 11:00:37

开源DevOps工具
点赞
收藏

51CTO技术栈公众号