在我们中国,要下载 npm
包非常慢,如果使用 cnpm
下载包就非常快了,感觉很爽,但是 cnpm
也有几个大问题:
-
1.cnpm 的仓库只是
npm
仓库的一个拷贝,它不承担publish
工作,所以你用cnpm publish
命令会执行失败的 -
2.不仅是
publish
会执行失败,其它的需要注册用户(npm adduser
)、或者修改 package 状态等命令都无法用cnpm
-
3.有很多
npm
包都集成了npm install
,比如 yeoman 的所有generators
,在最后基本都会调用npm install
,( 可以看其源码 )这种情况下使用cnpm
完全无效,必须中断操作,然后自己手动运行cnpm install
,或者在运行yo [generator]
时就指定--skip-install
,这体验就很不爽了 -
4.还有一种情况是,很多和
npm
API 相关的 package,都会读取~/.npmrc
中的 registry,或者使用默认的 registry —— [https://registry.npmjs.org/][npm-registry],去查询 npm package 相关的信息,比如下面这些:- npm-latest: 查询某个 package 的最新版本号
- npm-name: 查询某个 package name 是否被注册了
- npm-dependents: 查找某个模块所依赖的其它所有模块
- …
如果你用的任何一个包或其所依赖的包中用了这些 package,那么在这些包请求网络时也得慢死了!
怎么解决上面的问题呢?
可以来使用我写的 smart-npm 模块,它封装了 npm 和 cnpm 在里面,根据你使用的命令自动切换 npm 或者 cnpm。
更多详情可以去 smart-npm 查看,也欢迎诸位来吐槽!
@leizongmin cnpm 只是对 npm 的一个封装,在忽略网络被强的情况下,cnpm 能做的, npm 也一般都能做
1、你说的第1点,npm 已经禁用了发布带私有前缀的包到官方的 registry 了,你说可以发布我猜测应该是像 @fengmk2 说的搭建了一个私有的 npm 仓库,这和用 npm 或者 cnpm 无关,主要不过就是配置一个 registry 而已
2、安装公共的 npm 包它也就是配置了下 registry,把它指定到了淘宝的 registry,并且加上了其它一下环境变量
你上面说的其实都是 npm 的功能, 和 cnpm 无关,cnpm 只是帮你进一步配置了下;这些你用 smart-npm 都可以做到,你有兴趣可以去了解下 cnpm 及 smart-npm 原理,非常简单,无非是对 npm 进行的一次次封装,其实大家最终用的功能都是 npm 。
@qiu8310 其实是你理解错了。 1、我指的cnpm是自己搭建一个 http://cnpmjs.org/ 这样的私有npm,可以把一些不想公开的包发到这个私有npm上去,这样自己可以使用cnpm命令来安装,而其他人安装不了。对于一些可以公开的包,我们是直接发到npm上。 2、而cnpm命令的一个好处时,你可以cnpm install 安装私有的包,也可以安装公共的包,所以大家往往也把cnpm当作是一个npm镜像。 3、简而言之,你没弄懂cnpm是干嘛的。
我大概是弄懂楼主这个工具的用途了,『使用cnpm命令安装模块很快,但是publish模块时需要切换回npm命令,smart-npm可以省去来回切换的麻烦,它会替换原来的npm命令,使用npm命令安装模块时自动选择cnpm的镜像』 给些建议: 1、安装smart-npm时直接把淘宝的镜像配置好就行了(或写死在程序里面),不需要用户自己再手动配置(因为淘宝的镜像相对稳定,不会过一阵就没了的) 2、介绍里面废话太多,一眼看不出这个东西是干嘛的,只知道是要『干掉cnpm』
@leizongmin 好吧,看来现在流行用私有的仓库了。
我说的只是 cnpm 那个命令 https://github.com/cnpm/cnpm ,和私有仓库没关,所以你也没有理解我说的。
如果你用了 cnpm 的私有仓库,那算了,还是用 cnpm 命令吧;我只是个人用户,用不着私有仓库,我相信有很多像我这样的人。
@qiu8310 哦哦,我是用了代理,我没留意到代理是全局的,还以为仅浏览器。
localhost:~ jinceon$ ping www.youtube.com
PING youtube-ui-china.l.google.com (184.168.134.127): 56 data bytes
64 bytes from 184.168.134.127: icmp_seq=0 ttl=51 time=219.565 ms
64 bytes from 184.168.134.127: icmp_seq=1 ttl=51 time=218.498 ms
64 bytes from 184.168.134.127: icmp_seq=2 ttl=51 time=216.837 ms
64 bytes from 184.168.134.127: icmp_seq=3 ttl=51 time=217.746 ms
^C
--- youtube-ui-china.l.google.com ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 216.837/218.161/219.565/1.001 ms