一个简单的 npm/yarn registry (镜像源)切换工具
Github: https://github.com/YunYouJun/nnrm
npm 用户常常因为国内环境需要在 npm 的官方镜像与国内加速镜像间切换。譬如,(没有代理的情况下)本地安装一些依赖包可以使用淘宝镜像,而发布包的时候则要切换至 npm 。
nrm 使得切换更加方便,我们可以简单地使用 nrm use taobao
的方式切换镜像。但是在切换镜像前,安装 nrm 本身也是一件很慢的事情,nrm 依赖了已 deprecated 的且包体较大的 request,以及 npm 包,以及一些其他依赖。
而我自身至今使用过的实际只有 nrm ls
与 nrm use
命令而已。(偶尔可能尝试一下 nrm test
进行测速)。
nnrm 相比 nrm 的改进之处,极小的依赖。以及支持 yarn 。( yarn 与 npm 的 registry 是互相独立的。)
yarn global add nnrm
# npm install -g nnrm
nnrm 同时绑定了四个命令 nnrm
nrm
nyrm
yrm
。
npm 可以使用 nnrm
或 nrm
切换。
yarn 可以使用 nyrm
或 yrm
切换。
nnrm use taobao
# nrm use taobao
# 测速
nnrm test
# 显示所有源
nnrm ls
1
imzcg2 2021-03-05 02:51:14 +08:00 via Android
有没有可能添加自定义源
|
2
hxsf 2021-03-05 07:57:29 +08:00 via iPhone
可以定义 publishConfig 啊
|
3
yazoox 2021-03-05 08:07:06 +08:00 1
这个可以有!有空试试
|
4
xiangchen2011 2021-03-05 08:46:57 +08:00 1
不错,感觉比 nrm 好用
|
5
Cbdy 2021-03-05 09:10:24 +08:00 via Android
蛮怪的,设置几个 alias 不就可以了吗?
|
7
MyFaith 2021-03-05 09:46:34 +08:00
nrm 和 yrm 的结合体
|
8
YunYouJun OP @Cbdy 本身目的的话便是为了省去输入较长的命令或者配置 alias 的麻烦,场景比如,给实验室的某台机器 /学弟学妹切个源,安装一个几 K 的包,很明显比专门再去为每台机器配置 alias 要方便的多。以及保存了几个常用的 registry 。(以及测速总不能挨个 ping 一遍吧)
|
9
ezreal 2021-03-05 13:32:25 +08:00
和 cgr 有什么差别 https://www.npmjs.com/package/cgr
|
11
YunYouJun OP @ezreal 区别就是我并不知道有 cgr 这个东西。其次就是我想要替代掉 deprecated 的 request 。具体区别也写在了 Features 里。(反倒是 cgr 与 nrm 有和区别?)
|
12
hxsf 2021-03-05 13:56:42 +08:00
@YunYouJun #10
> npm 用户常常因为国内环境需要在 npm 的官方镜像与国内加速镜像间切换。譬如,(没有代理的情况下)本地安装一些依赖包可以使用淘宝镜像,而发布包的时候则要切换至 npm 。 对此我提出可以配置 publishConfig.regsitry 而已,一劳永逸,不需要因为发布包而切换。直接用一个镜像站就行了。 而国内几家镜像站差距不大,平时也不会来回切换。 而且在有 lock 的情况下,切换源并不会有影响。 |
13
abersheeran 2021-03-05 14:08:00 +08:00
不是很懂哈。直接给 npm 配置代理不就好了吗?
|
14
YunYouJun OP @hxsf
@abersheeran 举的一个例子,可能不是很恰当。换一个例子。 我需要给实验室(国内)的机器部署 node 的相关项目,首先我自行给其配代理不合适,其次部署项目时可能偶尔有一些自己新发的包,而国内的镜像更新必然有延迟,这时我可能需要临时切换到 npm 来获取最新的版本,而日常则继续默认切换回国内镜像。 |
15
YunYouJun OP @hxsf (实质我自己本地一直用的 npm 官方镜像,有魔法所以没有这个烦恼。但是经常要帮师弟师妹同学们调试,或者管一些其他服务器,所有就写了这个脚本以备方便一些。)所以应该属于面向不同需求。
|
16
YunYouJun OP @imzcg2
@chouchoui 整好了,加了 `nnrm add example https://example.com` 和 `nnrm remove example` 自定义源的方式。 自定义源时,会默认新建文件 `~/.nnrm/registries.json` 来记录,因此不影响升级。 |
17
Opportunity 2021-05-11 12:14:53 +08:00
所以这个对应的操作是把 lockfile 放进 gitignore 里?这完全接受不了啊,被非直接依赖的更新坑了好多次了。。
我一直想要的是一个在每台机器上根据需要替换 `yarn.lock` 里面 `resolved` 字段的程序,但是现在的解决方案好像基本还是只有 grep,但是不同镜像又不是每个都能这么简单搞定的。 |
18
YunYouJun OP @Opportunity 确实没考虑过这个问题。这个我设想主要解决的是临时切换镜像源的问题,方便在不同服务器上快捷操作。
|
19
enjoeq 2022-04-17 13:56:51 +08:00
谢谢,比 yrm 和 nrm 要好用
|