cnpm 与 npm registry 管理
长途跋涉去西方取 package 总是路途艰难,淘宝技术部开发了
cnpmjs.org
和cnpm
这两个项目来克服这些人为的困难。
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 Manager比
cnpmjs.org
的功能更强大,并且囊括各种仓库于一体,我没有必要再部署一个单独的npm registry
。
所以我直接在npm
里使用淘宝镜像来加速:
npm config set registry https://registry.nlark.com
cnpm
cnpm是cnpmjs.org
的客户端,默认指向淘宝镜像
,可视为npm
或yarn
的替代品,但它并不好用:
cnpm
有自己的node_modules
目录结构,并且与npm
不兼容。- 使用
JetBrains
家族的IDE打开cnpm
的项目,会遇到卡死的情况。
我自己的cnpm
为了便捷地切换npm
全局的registry
,我用bash
搞了个我自己的cnpm
来管理npm
的全局registry
设置:
- 创建一个
bash
命令脚本
# 当然你可以给这个脚本起其它的名字。
$ sudo vim /usr/local/bin/cnpm
- 写入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
- 增加运行权限
sudo chmod +x /usr/local/bin/cnpm
- 使用命令脚本
# 设置 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 # 举例