cnpm 与 npm registry 管理

Thu Aug 19 2021

长途跋涉去西方取 package 总是路途艰难,淘宝技术部开发了 cnpmjs.orgcnpm 这两个项目来克服这些人为的困难。

cnpmjs.org

cnpmjs.org是一个基于nodejs开发、供企业/团队使用的私有npm registry,它同时也可以中继缓存npmjs.org的上的packge,让用户可以在困难的网域顺利地获取npm package

它功能完善也易于部署和维护,但是由于一些原因,我并不想部署一个私有的cnpmjs.org

  • 中继npmjs.org时间长了以后,cnpmjs.org要占用掉几百GB甚至更多的磁盘空间来缓存package
  • 直接使用淘宝基于cnpmjs.org部署的公共镜像的的话,也能有很快的速度,我并不需要在局域网自己来做缓存。
  • Sonatype Nexus Package Managercnpmjs.org的功能更强大,并且囊括各种仓库于一体,我没有必要再部署一个单独的npm registry

所以我直接在npm里使用淘宝镜像来加速:

bash
|
npm config set registry https://registry.nlark.com

cnpm

cnpmcnpmjs.org的客户端,默认指向淘宝镜像,可视为npmyarn的替代品,但它并不好用:

  • cnpm有自己的node_modules目录结构,并且与npm不兼容。
  • 使用JetBrains家族的IDE打开cnpm的项目,会遇到卡死的情况。

我自己的cnpm

为了便捷地切换npm全局的registry,我用bash搞了个我自己的cnpm来管理npm的全局registry设置:

  1. 创建一个bash命令脚本
bash
|
# 当然你可以给这个脚本起其它的名字。 $ sudo vim /usr/local/bin/cnpm
  1. 写入bash脚本
bash
|
#!/bin/bash # 默认使用淘宝镜像 taobao_registry=https://registry.nlark.com REG_URL=${1:-$taobao_registry} # 如果传入参数是 unset,则清空已设置的 registry if [ "$1" == "unset" ] then echo 'unset npm registry from taobao' npm config delete registry # 设置淘宝镜像或者指定的镜像 else echo 'set npm registry to taobao' npm config set registry $REG_URL fi # 检查 npm 配置 npm config list
  1. 增加运行权限
bash
|
sudo chmod +x /usr/local/bin/cnpm
  1. 使用命令脚本
bash
|
# 设置 npm 全局使用 淘宝镜像 registry $ cnpm # 设置 npm 全局使用 其它镜像 registry $ cnpm <REGISTRY_URL> $ cnpm https://r.npm.taobao.org # 举例 # 清除 npm 的全局 registry 设置 $ cnpm unset # 不使用cnpm来设置npm registry $ npm config set registry <REGISTRY_URL> $ npm config set registry https://registry.nlark.com # 举例