淘宝源镜像站:npmmirror.com/
npm.taobao.org
于 2024 年 1 月 22 日 正式过期
建议大家 点赞、收藏 ~ 以备不时之需 ~
全文 4000 字~
前言
我们通过 npm
安装包时,默认是通过国外的服务器安装的。因此大家在安装时,经常会遇到魔法问题。解决魔法问题的方案有两种,一种是 npm
走代理,另外一种则是通过国内镜像源安装。
据我观察,大多数开发者(包括资深大牛)为了方便,常常使用 taobao
源来解决该问题。
但在最近,淘宝源出现了一些问题。
具体信息
2022 年 5 月 淘宝源发布了公告:
淘宝镜像源地址由 registry.npm.taobao.org
替换为了 registry.npmmirror.com
。
迄今为止,已经有接近一年半的时间了。但很多人忽略了这个新闻,因为 registry.npm.taobao.org
一直处在可用的状态,并没有说明具体废弃时间。
2024 年 1 月 22 日 ,registry.npm.taobao.org
的 SSL 证书正式过期。因此通过安全的方式使用该源的方法已不可用。
就在今天,我在安装新包时报错:
perl
ERR_PNPM_META_FETCH_FAIL GET https://registry.npm.taobao.org/@threlte%2Ftheatre: request to https://registry.npm.taobao.org/@threlte%2Ftheatre failed, reason: certificate has expired
这个错误的原因是 registry.npm.taobao.org
的 SSL 证书过期了。
虽然这并不意味着 taobao
源完全废弃,我们依旧可以通过关闭 SSL 严格检测来跳过该验证。但这样做的缺陷一是 HTTP 的安全性问题,二则是根本问题没有解决,也许在某一天,该域名关闭后,我们又会再次遇到该问题。
解决方案
npm
由于大家通常 npm 较为常用,因此我这里先讲讲 npm 换源问题。
- 清除缓存:
shell
npm cache clean --force
- 首先我们会尝试直接切换,切换后安装尝试:
shell
# 切换 npm 官方源
npm config set registry https://registry.npmjs.org
# 切换新的 taobao 源
npm config set registry https://registry.npmmirror.com
如果该操作生效,则忽略下面步骤。
- 然后查看项目根目录下的
.npmrc
有没有配置源地址,如果没有忽略该步,如果有请调整:
.npmrc
# 切换 npm 官方源
registry=https://registry.npmjs.org
# 切换新的 taobao 源
registry=https://registry.npmmirror.com
如果该操作生效,则忽略下面步骤。
- 查看 user 目录下的
.npmrc
有没有配置好新源(理论上第一步会修改该文件的源地址,如果没有手动修改):
路径为:用户/用户名/.npmrc
.npmrc
# 切换 npm 官方源
registry=https://registry.npmjs.org
# 切换新的 taobao 源
registry=https://registry.npmmirror.com
- 修改环境变量 npm_config_registry:
我的电脑 -> 右击 -> 属性 -> 高级 -> 环境变量 -> npm_config_registry
将该环境变量删除,或者修改为 https://registry.npmjs.org
或 https://registry.npmmirror.com
nrm
这里我建议大家使用源管理工具 nrm
来管理 npm registry
,nrm
上 taobao
源的地址在很久之前就更新为了 npmirror
,因此如果你使用的 nrm 大概率不会出现该问题。
如果你使用 nrm 遇到了 SSL 问题,大概是 nrm 的版本过低,尝试通过
npm update nrm
更新 nrm 版本
下面我简单介绍下 nrm 的安装及使用。
安装
shell
npm install -g nrm
如果你安装 nrm 遇到问题,那么大概率是你的命令行没有通过代理安装,你可以尝试换成新的 taobao 源,或者命令行开启代理。
shell
# 请将后面的地址替换成你的代理地址,如(clash): 127.0.0.1:7890
npm config set proxy http://proxy-server.com:8080
npm config set https-proxy http://proxy-server.com:8080
使用
查看源列表:
shell
$ nrm ls
npm ---------- https://registry.npmjs.org/
yarn --------- https://registry.yarnpkg.com/
tencent ------ https://mirrors.cloud.tencent.com/npm/
cnpm --------- https://r.cnpmjs.org/
taobao ------- https://registry.npmmirror.com/
npmMirror ---- https://skimdb.npmjs.com/registry/
基础操作列表:
shell
# 查看版本
nrm --version
# 查看所有源及当前源
nrm ls
# 使用源
nrm use xxx
# 添加源
nrm add <registry> <url>
# 删除源
nrm del registry
# 帮助
nrm help
pnpm
我这里项目上使用的 pnpm
,因此最先解决的也是 pnpm
的问题。它的操作于 npm
基本一致,但 pnpm
通过 npm
的操作并没有解决问题,因此多了一步重装的流程。
- 清除缓存:
shell
npm cache clean --force
pnpm store prune
- 首先我们会尝试直接切换,切换后安装尝试:
shell
# 切换 npm 官方源
pnpm config set registry https://registry.npmjs.org
# 切换新的 taobao 源
pnpm config set registry https://registry.npmmirror.com
如果该操作生效,则忽略下面步骤。
- 然后查看项目根目录下的
.npmrc
有没有配置源地址,如果没有忽略该步,如果有请调整:
.npmrc
# 切换 npm 官方源
registry=https://registry.npmjs.org
# 切换新的 taobao 源
registry=https://registry.npmmirror.com
如果该操作生效,则忽略下面步骤。
- 查看 user 目录下的
.npmrc
有没有配置好新源(理论上第一步会修改该文件的源地址,如果没有手动修改):
路径为:用户/用户名/.npmrc
.npmrc
# 切换 npm 官方源
registry=https://registry.npmjs.org
# 切换新的 taobao 源
registry=https://registry.npmmirror.com
- 修改环境变量 npm_config_registry:
我的电脑 -> 右击 -> 属性 -> 高级 -> 环境变量 -> npm_config_registry
将该环境变量删除,或者修改为 https://registry.npmjs.org
或 https://registry.npmmirror.com
- 如果以上皆未生效,尝试重装
pnpm
:
shell
# 卸载
npm uninstall -g pnpm
# 安装
npm install -g pnpm
cnpm
cnpm
我这里使用的比较少,因此如果你们 cnpm
遇到了问题,如果不能解决,我建议直接重装 cnpm
:
shell
npm install -g cnpm --registry=https://registry.npmmirror.com
关闭严格检查(最简单)
最简单的方案就是关闭严格检查。但我并不建议你这么做,因此放在了最后一条。
关闭严格检查有两个缺陷:
- HTTP 的安全性问题
- 根本问题没有解决,也许在某一天,该域名关闭后,我们又会再次遇到该问题
关闭方法:
shell
npm config set strict-ssl false
最后
最后还是建议大家多关注关注开发相关的新闻,这类新闻虽然看起来不起眼,但指不定在什么时候就给大家致命一击 ~