在我们中国,要下载 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.还有一种情况是,很多和
npmAPI 相关的 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。