V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
YunYouJun
V2EX  ›  分享创造

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

  •  
  •   YunYouJun ·
    YunYouJun · 2021-03-04 23:03:26 +08:00 · 3915 次点击
    这是一个创建于 1361 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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
    

    6ZfEtI.png

    # 测速
    nnrm test
    

    6ZfAAA.png

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

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

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

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

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

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

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

    我一直想要的是一个在每台机器上根据需要替换 `yarn.lock` 里面 `resolved` 字段的程序,但是现在的解决方案好像基本还是只有 grep,但是不同镜像又不是每个都能这么简单搞定的。
    YunYouJun
        18
    YunYouJun  
    OP
       2021-05-11 21:19:34 +08:00
    @Opportunity 确实没考虑过这个问题。这个我设想主要解决的是临时切换镜像源的问题,方便在不同服务器上快捷操作。
    enjoeq
        19
    enjoeq  
       2022-04-17 13:56:51 +08:00
    谢谢,比 yrm 和 nrm 要好用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5544 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 09:30 · PVG 17:30 · LAX 01:30 · JFK 04:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.