qiu8310 / smart-npm

Auto switch registry according your npm command.
327 stars 31 forks source link

smart-npm

Greenkeeper badge NPM version GitHub version Build Status Build status Dependency Status Inline docs Coverage Status

智能的 npm,让你在中国使用 npm 时,下载速度更快,使用更方便!

jsdoc 生成的文档

github 地址

背景

npm 时,默认它会访问国外资源,所以会非常卡,有时甚至会被墙。现在市面上一般有三种解决方案:

  1. .npmrc 上配置一个国内的 registry 镜像

  2. 使用 cnpm

  3. 使用 VPN

其实 cnpm 的意图并不是简单给我们用来去下载 npm 资源的,它是为 cnpm 服务端(也可以理解成 npm 的私有仓库)服务的。所以你如果简单的把 cnpm 当作 npm 来用会有出现很多问题(见下)。

所以,我们就需要一个更智能的 npm 了,可以在我们使用 npm install 时自动从国内的镜像下载,而在我们使用 npm publish 又能发布到官方的 registry 上!

就让 smart-npm 来为你完成吧!

安装

npm install --global smart-npm --registry=https://registry.npm.taobao.org/

安装成功后默认会在你的 npm 用户配置文件 ~/.npmrc 中添加淘宝的 registry。

另外建议安装后替换原生的 npm 命令:

alias npm=smart-npm
alias npm=smart-npm

可以使用命令 where smart-npm 来定位到 smart-npm.cmd 文件所在的位置。如:在我的系统上执行 where smart-npm 的结果是:

C:\Users\Mora>where smart-npm
C:\Program Files\nodejs\smart-npm
C:\Program Files\nodejs\smart-npm.cmd

同理可以定位到 npm.cmd 的位置

使用指定版本的 npm

smart-npm 使用的是内部的 npm,和系统的 npm 没有任何关系

snpm install-npm          # 安装最新版的 npm
snpm install-npm 4        # 安装 4.x.x 版本的 npm

卸载

npm uninstall --global smart-npm

使用

安装后,你可以使用命令 snpmsmart-npm,如果你按上面的方法替换了原生的 npm,那么你也可以直接使用 npm

smart-npm 扩展的几个新命令

比较有用但很少被用的一些 npm 的命令

把 cnpm 当作 npm 来用时会出现的问题

  1. publish, adduser, loginClick here to see more) 等命令无法通过 cnpm 来执行,即运行 cnpm publish 来发布一个版本会失败的

  2. 某些命令在 cnpmnpm 上表现完全不一样,比如:

    • cnpm version:显示当前 cnpm 版本号; 而 npm version:是可以修改当前 package 的版本号的
    • cnpm -g root:会报错; 而 npm -g root 会显示 global 安装的目录
  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 package 相关的信息,比如下面这些:

    • npm-latest: 查询某个 package 的最新版本号
    • npm-name: 查询某个 package name 是否被注册了
    • npm-dependents: 查找某个模块所依赖的其它所有模块
    • ...

    如果你用的任何一个包或其所依赖的包中用了这些 package,那么在这些包请求网络时也得慢死了!

调试

调试 npm

--loglevel

特定 loglevel 的缩写信息

Todo List

Reference

Release History

Changelog

License

Copyright (c) 2015 Zhonglei Qiu. Licensed under the MIT license.