smart-npm
智能的 npm
,让你在中国使用 npm
时,下载速度更快,使用更方便!
通知:新发布的 1.0.0 版本去掉了 cnpm
模块,详情查看 Changelog
背景
用
npm
时,默认它会访问国外资源,所以会非常卡,有时甚至会被墙。现在市面上一般有三种解决方案:
在
.npmrc
上配置一个国内的 registry 镜像使用
cnpm
使用 VPN
第1个方案很粗暴,可以解决很多下载慢的问题,但是当你用
npm publish
时就会失败第2个方案不错,但这样你就又会遇到问题,到底哪些命令需要用
cnpm
,哪些命令需要用npm
呢?VPN 方案有时也不能百分百解决问题,有时有些 VPN 也不稳定,但有个 VPN 很保险就是
其实
cnpm
的意图并不是简单给我们用来去下载npm
资源的,它是为 cnpm 服务端(也可以理解成 npm 的私有仓库)服务的。所以你如果简单的把cnpm
当作npm
来用会有出现很多问题(见下)。
所以,我们就需要一个更智能的 npm
了,可以在我们使用 npm install
时自动从国内的镜像下载,而在我们使用 npm publish
又能发布到官方的 registry 上!
就让 smart-npm
来为你完成吧!
安装
windows 用户安装后,体验没有原生的好,因为每次运行都会创建一个子程序,所以请慎装!
Mac 或者 Linux 用户
# 先将系统的 npm 备份到 npm-original
ln -s $(npm root -g)/npm/bin/npm-cli.js $(dirname $(which npm))/npm-original
npm install --global smart-npm --registry=https://registry.npm.taobao.org/
Window 用户请手动备份 npm.cmd 文件
npm install --global smart-npm --registry=https://registry.npm.taobao.org/
安装成功后默认会在你的 npm
用户配置文件 ~/.npmrc
中添加淘宝的 registry。
使用
安装后系统的
npm
会被替换了,如果你要使用原生的npm
命令,可以用npm-original
代替。新的
npm
会自动根据你使用的命令切换 registry:当你使用publish
,config
,adduser
,star
等(click here to see more) 命令时,会强制使用官方的 registryhttps://registry.npmjs.org
;当你使用其它命令时,都会使用淘宝的镜像https://registry.npm.taobao.org/
。如果要强制使用某个 registry 时,只要在命令后面添加 registry 参数即可,比如,
npm install jquery --registry=https://r.cnpmjs.org
就会使用你指定的 registry 去拉取jquery
如果要强制使用官方的 registry, 只要在命令后面加上
--npm
即可, 比如,npm install jquery --npm
就会使用官方的 registry 去拉取jquery
,(当镜像没有及时更新时,用此会选项很有效)如果你想修改默认的淘宝镜像或者官方的 registry,可以在你的环境变量中添加这两个参数:
NPM_OFFICIAL_REGISTRY
,NPM_MIRROR_REGISTRY
,以此来修改默认的官方 registry 和 淘宝镜像 registry。 更多环境变量的配置请点击这里
smart-npm
扩展的几个新命令
npm check
: 由 npm-check 提供,和npm outdated
类似,但提示更人性化,同时它也支持自动更新依赖npm stats {package}
: 打开一个网页,可以看到 package 的统计数据,包括被下载的次数、最近更新时间、被依赖的次数及排名等数据npm user {package}
: 打开一个网页,跳到用户的npm
上的个人主页,如果加了参数-t
,则是跳到淘宝镜像的个人主页
比较有用但很少被用的一些 npm
的命令
npm repo {package}
: 用浏览器打开 package 的 github 地址(前提是此 package 的 package.json 文件中有设置repository
)npm home {package}
: 用浏览器打开 package 的首页(前提是此 package 的 package.json 文件中有设置homepage
)npm user {package}
:cnpm
的功能,用浏览器打开用户在淘宝镜像的主页,如https://npm.taobao.org/~{user_name}
npm view {package} versions
:查看 package 的所有版本号(只会显示版本号,不显示其它信息)npm outdated
:检查当前项目所依赖的 packages 是否有最新的版本可以更新
卸载
npm uninstall --global smart-npm
Mac 或 Linux 用户可以使用下面命令恢复之前备份的 npm
mv $(which npm-original) $(dirname $(which npm-original))/npm
把 cnpm 当作 npm 来用时会出现的问题
publish
,adduser
,login
(Click here to see more) 等命令无法通过cnpm
来执行,即运行cnpm publish
来发布一个版本会失败的某些命令在
cnpm
和npm
上表现完全不一样,比如:cnpm version
:显示当前cnpm 版本号
; 而npm version
:是可以修改当前 package 的版本号的cnpm -g root
:会报错; 而npm -g root
会显示 global 安装的目录
有很多
npm
包都集成了npm install
,比如 yeoman 的所有generators
,在最后基本都会 调用npm install
,(可以看其源码) 这种情况下使用cnpm
完全无效,必须中断操作,然后自己手动运行cnpm install
,或者在运行yo [generator]
时就指定--skip-install
, 这体验就很不爽了还有一种情况是,很多和
npm
API 相关的 package,都会读取~/.npmrc
中的 registry,或者使用默认的 registry —— https://registry.npmjs.org/, 去查询 npm package 相关的信息,比如下面这些:- npm-latest: 查询某个 package 的最新版本号
- npm-name: 查询某个 package name 是否被注册了
- npm-dependents: 查找某个模块所依赖的其它所有模块
- ...
如果你用的任何一个包或其所依赖的包中用了这些 package,那么在这些包请求网络时也得慢死了!
调试
调试 npm
--loglevel
- silent: completely silent. Zero logging output.
- win: Just the “npm ok” or “npm not ok” message at the end.
- error: When something unexpected and bad happens.
- warn: When something odd or potentially dangerous is happening.
- info: Helpful information so you can track what’s happening.
- verbose: Even more. Perhaps just a wee bit obnoxious, even.
- silly: Completely fuckin crazy, man. Dump everything. Whole objects, you name it, whatever.
特定 loglevel 的缩写信息
- s : ["--loglevel", "silent"]
- d : ["--loglevel", "info"]
- dd : ["--loglevel", "verbose"]
- ddd : ["--loglevel", "silly"]
- silent : ["--loglevel", "silent"]
- verbose : ["--loglevel", "verbose"]
- quiet: ["--loglevel", "warn"]
- q: ["--loglevel", "warn"]
Todo List
- 本地安装也会替代了全局的
npm
- 添加更多有用的组件
- 修改
stats
命令,把数据显示在命令行上
Reference
Release History
License
Copyright (c) 2015 Zhonglei Qiu. Licensed under the MIT license.