为什么 npm 下载这么慢?
npm 官方的 registry 服务器部署在美国,国内开发者下载依赖时,请求需要经过跨境链路,带宽受限、延迟高、丢包率高是常态。遇到大一点的依赖包或者依赖树复杂的项目,安装耗时动辄十几分钟,还很容易中途失败。
镜像源的作用就是在国内搭建一个同步服务器,定期从官方源拉取所有包的副本。我们从国内镜像下载,相当于走内网链路,速度通常能提升 5~20 倍,稳定性也大幅提高。
2026 年可用的国内镜像源盘点
国内有多家机构提供 npm 镜像服务,质量参差不齐。下面按综合推荐度排序:
| 镜像源 | 地址 | 运营方 | 适合人群 |
|---|---|---|---|
| npmmirror (阿里云) | https://registry.npmmirror.com |
阿里巴巴 | 绝大多数开发者首选,同步频率高、覆盖全 |
| 腾讯云镜像 | https://mirrors.cloud.tencent.com/npm/ |
腾讯云 | 华南地区速度优势明显 |
| 华为云镜像 | https://repo.huaweicloud.com/repository/npm/ |
华为云 | 企业内网环境兼容性好 |
| npm 官方源 | https://registry.npmjs.org/ |
npm Inc. | 发布包、排查问题时使用 |
注意:老版淘宝源
registry.npm.taobao.org早已停止维护,HTTPS 证书也已过期,继续使用会报证书错误,请统一更换为 npmmirror 新域名。
三种配置方式,对应不同场景
场景一:临时救急,不改全局配置
有时候只是临时装个包、或帮人调试项目,不想改动全局设置,可以在命令后直接指定源:
bash
# 单次安装指定包时使用国内源
npm install vue --registry=https://registry.npmmirror.com
# 完整安装项目依赖时临时走国内源
npm install --registry=https://registry.npmmirror.com
这种方式只对当前这一条命令生效,关闭终端后就恢复原样,适合临时测试。
场景二:一劳永逸,全局统一配置
这是最常用的方式,设置一次,本机所有项目默认都走国内源:
bash
# 先看一下当前用的是什么源
npm config get registry
# 设置为阿里云镜像
npm config set registry https://registry.npmmirror.com
# 再次确认,输出新地址就表示设置成功
npm config get registry
设置完成后,后续所有 npm install、npm i 命令都会默认从国内源下载。
场景三:项目级配置,团队协作更统一
如果是团队项目,更推荐把源配置写在项目里,保证所有人的环境一致。
在项目根目录新建一个 .npmrc 文件,写入:
bash
registry=https://registry.npmmirror.com
这个文件会随着代码一起提交到 Git,团队成员拉取代码后,执行安装时自动使用该源,不会因为各人本地配置不同而出现奇怪的问题。
配置优先级规则:项目内
.npmrc> 用户目录下的.npmrc> 全局配置 > 环境变量。如果发现设置不生效,优先检查项目里是不是已经有.npmrc文件覆盖了全局配置。
用 nrm 管理多个源,切换更省心
如果你经常需要在国内源和官方源之间切换(比如日常开发用国内源,发包时要切回官方源),每次手动输地址很麻烦。可以用 nrm 这个工具来统一管理:
安装
npm install -g nrm
常用操作
# 列出所有内置源,* 号标记当前正在使用的
nrm ls
# 一键切换到 npmmirror
nrm use npmmirror
# 测试各个源的响应速度,帮你选最快的
nrm test
# 添加公司私有源
nrm add company https://registry.your-company.com
# 删除不需要的源
nrm del company
常见问题排查
1. 改了源还是慢?
大概率是缓存和锁文件的问题。旧的 package-lock.json 里记录了原始源的地址,npm 会优先按锁文件里的地址下载。
解决步骤:
# 清除本地缓存
npm cache clean --force
# 删除依赖目录和锁文件
rm -rf node_modules package-lock.json
# Windows 系统使用:rd /s /q node_modules package-lock.json
# 重新安装
npm install
2. 证书过期报错
典型报错信息里包含 certificate has expired,这是因为还在用旧版淘宝源的域名。
直接切换到新域名即可:
npm config set registry https://registry.npmmirror.com
npm cache clean --force
3. 某些包一直下载失败
像 node-sass、electron、node-gyp 这类包,除了 npm 包本身还会下载二进制文件,只改 registry 不够,还需要单独配置二进制镜像:
# node-sass 二进制源
npm config set sass_binary_site https://npmmirror.com/mirrors/node-sass/
# electron 二进制源
npm config set electron_mirror https://npmmirror.com/mirrors/electron/
# node-gyp 源
npm config set node_gyp https://npmmirror.com/mirrors/node-gyp/
4. 设置了源但不生效
按优先级从高到低排查:
- 项目根目录有没有
.npmrc文件 - 系统环境变量里有没有设置
npm_config_registry - 用户目录下的
.npmrc是否被其他工具修改过
执行 npm config list 可以查看完整的生效配置,找到 registry 最终值就能定位问题。
5. 连接超时、断连
先检查是否开了代理,很多时候代理配置会干扰 npm 的网络请求:
# 查看代理配置
npm config get proxy
npm config get https-proxy
# 如果有多余的代理配置,删掉
npm config delete proxy
npm config delete https-proxy
其他包管理器的对应配置
yarn
yarn config set registry https://registry.npmmirror.com
pnpm
pnpm config set registry https://registry.npmmirror.com
如果追求极致安装速度,更推荐直接使用 pnpm,本身就比 npm 快很多,再配合国内源,体验提升非常明显。
几个实用建议
- 日常开发用国内源,发包切回官方源。国内镜像大多只做只读同步,不支持发布包操作。
- 不要混用多个包管理器。同一个项目既用 npm 又用 yarn/pnpm,容易导致 lock 文件冲突和依赖不一致。
- 团队项目统一用 .npmrc。把源配置纳入代码版本管理,减少环境差异带来的问题。
- 遇到安装异常,三板斧解决大半问题:清缓存 → 删 node_modules 和 lock 文件 → 重装。