WSL2 安装 npm 踩坑记录(各种 errno ECONNREFUSED、errno ETIMEDOUT 问题)

事情起因

  • 搭建 blog 需要,我是走 hexo + github 路线
  • 安装 hexo 要先安装 nodejs 和 npm,结果卡在安装 npm 不断踩坑

坑点一:官方路线

  • nodejs 官网

  • WSL2 安装 npm 踩坑记录(各种 errno ECONNREFUSED、errno ETIMEDOUT 问题)

  • 紧接着会跳转微软官网,微软推荐用 nodejs 版本管理器 nvm 安装

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
  • 我试着跟着操作但总是报错 curl (7) error遂放弃

坑点二:网上流传较多的 WSL 包管理器先安装再更新法

PART I: 安装 nodejs 和 npm

  • 参考 WSL Ubuntu 安装 nodejs 和 cnpm玩转WSL(7)之nodejs环境配置
  • 由于 WSL apt包管理器直接安装版本过时,所以通过以下这个 Github 项目 来安装指定的版本
  • 目前微软商城最新版本可找到 Ubuntu 20.x,而当前时间节点是 2022-02-17,最新版本 nodejs 是 v17.x(最新稳定版本 v16.x),所以我选择了 v17.x ,输入以下命令
curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -   #安装nodejs
sudo apt install -y nodejs
sudo npm cache clean -f                                           #清理缓存模块
sudo npm install -g n                                             #使用 n模块 管理 nodejs 版本

目前为止都比较顺利,通过查看版本号验证 nodejs 和 npm 安装是否成功

node -v      # v17.5.0
npm -v       # v8.4.1

但紧跟着安装 hexo 就爆大炸了,error ECONNREFUSED就如老朋友一样亲切
WSL2 安装 npm 踩坑记录(各种 errno ECONNREFUSED、errno ETIMEDOUT 问题)

WSL2 安装 npm 踩坑记录(各种 errno ECONNREFUSED、errno ETIMEDOUT 问题)

看提示我以为是代理的问题
WSL2 安装 npm 踩坑记录(各种 errno ECONNREFUSED、errno ETIMEDOUT 问题)

PART II: 处理代理(其实是个坑点,不用处理,我只是记录下来)

先给大家介绍下背景

  • 第一,dns 设置(控制面板->网络和共享中心->更改适配器设置(左栏)->当前网卡右击属性->双击 ipv4)
    WSL2 安装 npm 踩坑记录(各种 errno ECONNREFUSED、errno ETIMEDOUT 问题)

  • 第二,本地代理的设置(右击开始->设置->网络和 Internet->代理)
    WSL2 安装 npm 踩坑记录(各种 errno ECONNREFUSED、errno ETIMEDOUT 问题)

WSL2 安装 npm 踩坑记录(各种 errno ECONNREFUSED、errno ETIMEDOUT 问题)

  • 第三,hosts 文件(WSL 终端下,输入 vi /etc/hosts
    WSL2 安装 npm 踩坑记录(各种 errno ECONNREFUSED、errno ETIMEDOUT 问题)

背景介绍完,之后就开始踩坑了(请不要跟着做!!!

  • Step 1,设置全局代理(这些代理地址及端口上面已经查出来了)
    WSL2 安装 npm 踩坑记录(各种 errno ECONNREFUSED、errno ETIMEDOUT 问题)

  • Step 2,设置 npm 代理(首先了解到国内 npm install速度很慢,所以大部分资料推荐更换注册点为阿里 set registry https://...;其次是现在网上大部分资料给出的 registry快过时了,参考 npm 更换域名通知,其实你也可以通过 configure 提示信息发现就算用旧域名进去也会重定向到新域名)
    WSL2 安装 npm 踩坑记录(各种 errno ECONNREFUSED、errno ETIMEDOUT 问题)

  • Step 3,安装 cnpm,上一点说过国内访问 npm 太慢,所以大部分教程会给出一个叫 cnpm 的东西,通过他安装能快很多(然而对于我无效,还见到了老朋友)
    WSL2 安装 npm 踩坑记录(各种 errno ECONNREFUSED、errno ETIMEDOUT 问题)

至此,我开始吃不下饭睡不着觉,因为无论我怎么改代理(设为 null 或设为 localhost 、或者更改端口等等)总能遇到我们的老朋友 error ECONNREFUSED
WSL2 安装 npm 踩坑记录(各种 errno ECONNREFUSED、errno ETIMEDOUT 问题)

完结篇

  • 在我不懈努力下,终于找到一篇较有参考意义的 post——npm ERR! Error blabla
    WSL2 安装 npm 踩坑记录(各种 errno ECONNREFUSED、errno ETIMEDOUT 问题)

  • 我也试着为我们的 registry 显示添加一个 resolved addr

  • 第一步,找到这个 ip
    WSL2 安装 npm 踩坑记录(各种 errno ECONNREFUSED、errno ETIMEDOUT 问题)

  • 第二步,添加到 /etc/hosts
    WSL2 安装 npm 踩坑记录(各种 errno ECONNREFUSED、errno ETIMEDOUT 问题)

  • 第三步,清空所有代理

# 清空 npm 代理
npm config set proxy null
npm config set https-proxy null
npm config delete proxy
npm config delete https-proxy

# 清空全局代理
unset http_proxy https_proxy


# 验证
npm config list
env | grep -I proxy

WSL2 安装 npm 踩坑记录(各种 errno ECONNREFUSED、errno ETIMEDOUT 问题)

WSL2 安装 npm 踩坑记录(各种 errno ECONNREFUSED、errno ETIMEDOUT 问题)

  • 第四步,验证 hexo 是否安装成功直接输入 hexo 即可
    WSL2 安装 npm 踩坑记录(各种 errno ECONNREFUSED、errno ETIMEDOUT 问题)

至此,终于迈过了 WSL 安装 hexo 的一步

上一篇:如何在Solidity中获取ETH,BTC和其他加密货币的当前价格


下一篇:Python Twisted 编写的异步网络的基于以太坊的矿池