nnrm - 一个极简的 npm/yarn registry 切换管理器

2021-03-04 23:03:26 +08:00
 YunYouJun

nnrm 是什么

一个简单的 npm/yarn registry (镜像源)切换工具

Github: https://github.com/YunYouJun/nnrm

Why new nrm - nnrm?

npm 用户常常因为国内环境需要在 npm 的官方镜像与国内加速镜像间切换。譬如,(没有代理的情况下)本地安装一些依赖包可以使用淘宝镜像,而发布包的时候则要切换至 npm 。

nrm 使得切换更加方便,我们可以简单地使用 nrm use taobao 的方式切换镜像。但是在切换镜像前,安装 nrm 本身也是一件很慢的事情,nrm 依赖了已 deprecated 的且包体较大的 request,以及 npm 包,以及一些其他依赖。

而我自身至今使用过的实际只有 nrm lsnrm use 命令而已。(偶尔可能尝试一下 nrm test 进行测速)。

Features

nnrm 相比 nrm 的改进之处,极小的依赖。以及支持 yarn 。( yarn 与 npm 的 registry 是互相独立的。)

安装

yarn global add nnrm
# npm install -g nnrm

使用

切换源

nnrm 同时绑定了四个命令 nnrm nrm nyrm yrm

npm 可以使用 nnrmnrm 切换。

yarn 可以使用 nyrmyrm 切换。

nnrm use taobao
# nrm use taobao

# 测速
nnrm test

# 显示所有源
nnrm ls
3663 次点击
所在节点    分享创造
19 条回复
imzcg2
2021-03-05 02:51:14 +08:00
有没有可能添加自定义源
hxsf
2021-03-05 07:57:29 +08:00
可以定义 publishConfig 啊
yazoox
2021-03-05 08:07:06 +08:00
这个可以有!有空试试
xiangchen2011
2021-03-05 08:46:57 +08:00
不错,感觉比 nrm 好用
Cbdy
2021-03-05 09:10:24 +08:00
蛮怪的,设置几个 alias 不就可以了吗?
chouchoui
2021-03-05 09:33:58 +08:00
@imzcg2 安装目录下面有个 registries.json,试了一下编辑有效
MyFaith
2021-03-05 09:46:34 +08:00
nrm 和 yrm 的结合体
YunYouJun
2021-03-05 12:41:06 +08:00
@Cbdy 本身目的的话便是为了省去输入较长的命令或者配置 alias 的麻烦,场景比如,给实验室的某台机器 /学弟学妹切个源,安装一个几 K 的包,很明显比专门再去为每台机器配置 alias 要方便的多。以及保存了几个常用的 registry 。(以及测速总不能挨个 ping 一遍吧)
ezreal
2021-03-05 13:32:25 +08:00
和 cgr 有什么差别 https://www.npmjs.com/package/cgr
YunYouJun
2021-03-05 13:49:22 +08:00
@hxsf hhh 我觉得这和,我感觉身子冷,出去跑跑还是打开空调的选择差不多。
YunYouJun
2021-03-05 13:53:35 +08:00
@ezreal 区别就是我并不知道有 cgr 这个东西。其次就是我想要替代掉 deprecated 的 request 。具体区别也写在了 Features 里。(反倒是 cgr 与 nrm 有和区别?)
hxsf
2021-03-05 13:56:42 +08:00
@YunYouJun #10

> npm 用户常常因为国内环境需要在 npm 的官方镜像与国内加速镜像间切换。譬如,(没有代理的情况下)本地安装一些依赖包可以使用淘宝镜像,而发布包的时候则要切换至 npm 。

对此我提出可以配置 publishConfig.regsitry 而已,一劳永逸,不需要因为发布包而切换。直接用一个镜像站就行了。

而国内几家镜像站差距不大,平时也不会来回切换。

而且在有 lock 的情况下,切换源并不会有影响。
abersheeran
2021-03-05 14:08:00 +08:00
不是很懂哈。直接给 npm 配置代理不就好了吗?
YunYouJun
2021-03-05 14:15:49 +08:00
@hxsf
@abersheeran

举的一个例子,可能不是很恰当。换一个例子。
我需要给实验室(国内)的机器部署 node 的相关项目,首先我自行给其配代理不合适,其次部署项目时可能偶尔有一些自己新发的包,而国内的镜像更新必然有延迟,这时我可能需要临时切换到 npm 来获取最新的版本,而日常则继续默认切换回国内镜像。
YunYouJun
2021-03-05 14:27:32 +08:00
@hxsf (实质我自己本地一直用的 npm 官方镜像,有魔法所以没有这个烦恼。但是经常要帮师弟师妹同学们调试,或者管一些其他服务器,所有就写了这个脚本以备方便一些。)所以应该属于面向不同需求。
YunYouJun
2021-03-05 17:53:30 +08:00
@imzcg2
@chouchoui

整好了,加了 `nnrm add example https://example.com` 和 `nnrm remove example` 自定义源的方式。
自定义源时,会默认新建文件 `~/.nnrm/registries.json` 来记录,因此不影响升级。
Opportunity
2021-05-11 12:14:53 +08:00
所以这个对应的操作是把 lockfile 放进 gitignore 里?这完全接受不了啊,被非直接依赖的更新坑了好多次了。。

我一直想要的是一个在每台机器上根据需要替换 `yarn.lock` 里面 `resolved` 字段的程序,但是现在的解决方案好像基本还是只有 grep,但是不同镜像又不是每个都能这么简单搞定的。
YunYouJun
2021-05-11 21:19:34 +08:00
@Opportunity 确实没考虑过这个问题。这个我设想主要解决的是临时切换镜像源的问题,方便在不同服务器上快捷操作。
enjoeq
2022-04-17 13:56:51 +08:00
谢谢,比 yrm 和 nrm 要好用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/758624

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX