在前端项目构建的过程中,npm
、yarn
应该是当前使用得最频繁的包管理工具了,他们帮助我们解决了复杂的依赖关系。在使用 npm
下载包时,由于是从国外的 NPM 服务器上下载,导致有时安装第三方包到本地时很慢,很蛋疼吧。
于是就有了 cnpm
,这是淘宝团队做的淘宝 NPM 镜像。你可以放心地用 cnpm
来代替 npm
,因为它同步频率为 10 分钟一次,以保证尽量与官方服务同步。
如果需要马上更新,cnpm
提供了一个特有命令 cnpm sync <pkg-name>
来同步某个模块。
「重要通知」原淘宝 npm 域名即将停止解析,请切换至新域名 npmmirror.com,
http://npm.taobao.org
和http://registry.npm.taobao.org
将在 2022.06.30 号正式下线和停止 DNS 解析。
相关域名切换参考如下:
http://npm.taobao.org => https://npmmirror.com
http://registry.npm.taobao.org => https://registry.npmmirror.com
一、使用 cnpm(不推荐)
使用 cnpm
命令替代 npm
,安装非常地简单。
它支持 npm 除了
npm publish
之外的所有命令。
- 安装
$ npm i -g cnpm --registry=https://registry.npmmirror.com/
- 测试是否成功安装
$ cnpm -v
- 安装模块
$ cnpm install [name]
二、替换 npm 镜像源
尽管我们安装并使用 cnpm
,但是有一些命令(如 create-react-app
等)它们内部还是使用了 npm
命令,仍是访问国外的镜像源,所以还是会慢。
首先,通过以下命令可以查看或设置 npm
的源地址:
# 查看 registry
$ npm config get registry
# 设置 registry
$ npm config set registry <registry-url>
下面我们将其修改为淘宝镜像源:
$ npm config set registry https://registry.npmmirror.com/
也可以直接在配置文件 ~/.npmrc
中添加一行配置并保存:
registry=https://registry.npm.taobao.org/
三、安装依赖包时,直接指定镜像源
这种方式太麻烦了,每次都要加上镜像源地址。
$ npm i <pkg-name> --registry=https://registry.npmmirror.com
四、为什么不推荐 cnpm 呢?
首先,使用 npm
作为前端项目包管理工具的话,使用 npm
和 cnpm
来安装包时有区别的。通常我们前端项目中都会有 package-lock.json
文件(其作用可看文章),这两个命令对其有一定的影响:
cnpm i
不受package-lock.json
影响,只会根据package.json
进行下载安装。cnpm i xxx@xxx
不会跟新到package-lock.json
中去。npm i xxx@xxx
会跟新到package-lock.json
中去。在多人共同协作维护的项目中,
package-lock.json
是必不可少的,是为了确保不同开发者安装的包及其依赖保持一致,同时也是降低不同版本 npm 包给项目稳定性带来的影响。尤其是一些不遵循语义化版本控制的第三方 npm 包,就很容易被坑到。
五、用更好的方式吗?
通常,个人在项目中使用得更多的是 yarn。管理镜像源推荐使用 nrm
或 yrm
,可以快速切换镜像源。前者仅会修改 npm
镜像源,后者会同时修改 npm
和 yarn
镜像源。
关于一些全局依赖包,个人使用习惯是:与 Node 版本有关的使用 npm
安装(比如 Taro CLI 等)并配合 nvm
工具进行管理,其他的一般使用 yarn
进行安装。
管理 Node 版本推荐使用 nvm 工具,但请注意,如果使用了 nvm
建议移除 ~/.npmrc
中的 prefix
配置项(如果有的话),否则全局包可能会安装到同一目录下,而不会随着 Node 的切换而变化(原因看这里)。
The end.