在我们中国,要下载 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 查看,也欢迎诸位来吐槽!
我有一个建议,就是把包名取短一点。snpm 之类的。
这个倒不是很必要,因为你安装 smart-npm 后,它会取代你系统的 npm 的,使用的时候并不需要使用 smart-npm 命令,直接用 npm 就行,这就是为什么我叫它 smart-npm。
真的用上cnpm的用户不会只用cnpm的国内镜像功能,都会在内部搭上一个企业私有npm 自豪地采用 CNodeJS ionic
@fengmk2 这我到是没用过,研究下,谢谢了
@fengmk2 我们中国还是有很多个人用户用 npm 或者 cnpm 的,像我就从来没接触过企业私有的 npm;即使是企业私有的,它也不可能完全不用开源的一些 package 吧。
@qiu8310 cnpm的两个用法是:
1、发布和安装私有前缀的包,比如 @company/package-name
2、安装公共的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 命令吧;我只是个人用户,用不着私有仓库,我相信有很多像我这样的人。
@leizongmin 抱歉,文笔确实不好。
@leizongmin 感觉你还是没明白 smart-npm 。
@qiu8310 那就再写简明一点的介绍呗,我相信还是有一部分人没看明白的 ^_^
@leizongmin 简而言之,你说的是 cnpm 的服务端,而我说的是 cnpm 的客户端。
@leizongmin 语言表达是我的硬伤,我更新了一下我的 github 上的文档,有兴趣可以去瞧瞧 https://github.com/qiu8310/smart-npm
额,没觉得npm慢
@jinceon 你用了 VPN,或者不在中国 ?
支持楼主。
前排围观呼啦啦~
@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
@winky 谢谢!
更新到 1.0.0 了,去掉了内嵌的 cnpm,内嵌 cnpm 很多命令会和 npm 冲突
再回头来看 smart-npm 和 cnpm 的对比,smart-npm 还在原地踏步,而 cnpm 的 install 速度,在目前业界无人能敌了。
内网用的一个小的 sinopia 跑上了
我用nrm不解释
哈哈哈 需要把 cnpm 的作者 at 出来吗
cnpm … 我差点以为是 xxxx 的缩写 … 除非你只用npm官方源,否则这个方案并不好,有一些非官方源你还是没办法保证能随时正正常快速同步 长期最好的方法还是有个靠谱的工具。