一次性解决掉npm安装失败的问题

更换npm为国内镜像

在终端执行.

npm set registry http://registry.npmmirror.com

首先, 打开"我的电脑". 找到"c盘中用户文件夹". 找到你当前正在使用的"用户"

img1

img2

img3
img4

img5

代码如下.

registry=http://registry.npmmirror.com/

disturl=https://registry.npmmirror.com/-/binary/node/
# node-sass预编译二进制文件下载地址
sass_binary_site=https://registry.npmmirror.com/-/binary/node-sass
# sharp预编译共享库, 截止2022-09-20 sharp@0.31.0的预编译共享库并未同步到镜像, 入安装失败可切换到sharp@0.30.7使用
sharp_libvips_binary_host=https://registry.npmmirror.com/-/binary/sharp-libvips
python_mirror=https://registry.npmmirror.com/-/binary/python/
electron_mirror=https://registry.npmmirror.com/-/binary/electron/
electron_builder_binaries_mirror=https://registry.npmmirror.com/-/binary/electron-builder-binaries/
# 无特殊配置参考{pkg-name}_binary_host_mirror={mirror}
canvas_binary_host_mirror=https://registry.npmmirror.com/-/binary/canvas
node_sqlite3_binary_host_mirror=https://registry.npmmirror.com/-/binary/sqlite3
better_sqlite3_binary_host_mirror=https://registry.npmmirror.com/-/binary/better-sqlite3

MAC同学,

如果是M1芯片的. 需要先更新一些库. 不是M1的不用管

包括但不限于:
brew install pkg-config cairo pango libpng jpeg giflib librsvg

  1. 命令行方式:

    npm config set registry http://registry.npmmirror.com
    
  2. 编辑 ~/.npmrc 文件, 设置方案和windows的一样

registry=http://registry.npmmirror.com/

disturl=https://registry.npmmirror.com/-/binary/node/
# node-sass预编译二进制文件下载地址
sass_binary_site=https://registry.npmmirror.com/-/binary/node-sass
# sharp预编译共享库, 截止2022-09-20 sharp@0.31.0的预编译共享库并未同步到镜像, 入安装失败可切换到sharp@0.30.7使用
sharp_libvips_binary_host=https://registry.npmmirror.com/-/binary/sharp-libvips
python_mirror=https://registry.npmmirror.com/-/binary/python/
electron_mirror=https://registry.npmmirror.com/-/binary/electron/
electron_builder_binaries_mirror=https://registry.npmmirror.com/-/binary/electron-builder-binaries/
# 无特殊配置参考{pkg-name}_binary_host_mirror={mirror}
canvas_binary_host_mirror=https://registry.npmmirror.com/-/binary/canvas
node_sqlite3_binary_host_mirror=https://registry.npmmirror.com/-/binary/sqlite3
better_sqlite3_binary_host_mirror=https://registry.npmmirror.com/-/binary/better-sqlite3

附赠:
npm官方库搜索: https://www.npmjs.com/
JS语法规则:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference
rsa.js很古老的一个库 https://ohdave.com/rsa/

npm 默认其实是有“进度”的,只是你现在这种情况都是缓存 / 已经装好了,所以一闪而过只剩一句:

up to date in 1s

如果你想更清楚地看到安装过程 / 进度,可以用下面几种办法:


1️⃣ 强制显示进度条

npm 自带进度条配置:

npm config set progress true

之后再执行:

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

如果真的有包要下载,就会看到类似:

[####......] | reify: XX% ...

如果之前被设置成 progress=false,就不会显示,这条命令就是把它打开。


2️⃣ 用 --verbose 看详细日志(最直观)

想看“正在干啥、在下什么包”的具体过程:

npm install --registry=https://registry.npm.taobao.org --verbose

你会看到:

  • 正在解析依赖
  • 正在下载哪些包
  • 写入 node_modules 的过程

虽然不是一个漂亮的进度条,但能非常详细地看到安装进度。


3️⃣ 强制重新下载(否则可能直接“up to date”)

如果你已经安装过一次,npm 缓存都好了,再次 npm install 往往只有一句:

up to date in 1s

这种情况本来就没有下载过程,自然也看不到进度条。

如果你就是想“看一眼全过程”,可以:

# 清空 node_modules 和 package-lock.json
rm -rf node_modules package-lock.json  # PowerShell 用: rm -r -fo node_modules,package-lock.json

# 再重新装
npm install --registry=https://registry.npm.taobao.org --verbose

这样肯定能看到一大串下载日志 + 进度输出。


4️⃣ 总结一句话版本

  • 想要进度条npm config set progress true
  • 想要详细过程npm install --verbose
  • 总是 “up to date” 看不到:说明已经装好了,需要删掉 node_modules 再装一遍才能看到完整过程。

如果你把你现在 npm install 的完整输出贴出来,我也可以帮你判断,是“已经装好了”还是“被静默跳过了”。

你现在不是“没有进度”,而是 请求刚开始就挂了:证书过期(CERT_HAS_EXPIRED),所以一直在重试:

attempt 1 failed with CERT_HAS_EXPIRED
attempt 2 failed with CERT_HAS_EXPIRED
...

而且你用的是老的淘宝源:

https://registry.npm.taobao.org

这个源基本已经被官方替换成 npmmirror.com 了,证书问题也经常出。你这台机器上 Python 用清华源也报 SSL 问题,其实是一类问题。


1️⃣ 先换一个正常的 npm 源(推荐)

✔ 推荐 1:用官方源(最干净)

web 目录下执行:

npm config set registry https://registry.npmjs.org

# 然后再装:
npm install --verbose

✔ 推荐 2:用新的国内镜像(npmmirror)

如果访问 npmjs 比较慢,可以用 npmmirror:

npm config set registry https://registry.npmmirror.com

# 再执行
npm install --verbose

然后你可以看当前使用的是哪个源:

npm config get registry

应该显示为你刚设置的那个地址,而不是 taobao。


2️⃣ 临时使用命令行参数也可以

不改全局配置,只这次用:

npm install --registry=https://registry.npmmirror.com --verbose
# 或
npm install --registry=https://registry.npmjs.org --verbose

如果这样能跑通,就说明问题确实是 registry.npm.taobao.org 的证书。


3️⃣ 仍然报 CERT_HAS_EXPIRED 时再排查

如果换了源之后 仍然CERT_HAS_EXPIRED,那可能是:

  1. 系统时间不对

    • 检查 Windows 时间是否正确(年份/月份对不对)。
  2. 公司代理 / 防火墙拦截 HTTPS,用自签证书解密流量

    • 浏览器访问你设置的 registry 地址(例如 https://registry.npmmirror.com)看是否也有证书红叉。
    • 如果是公司代理,需要把公司的根证书导入系统,然后再让 npm 信任(这个就要找 IT 了)。

在这种公司内网场景下,有人会用下面这种“暴力方式”(不安全,只建议内网临时用):

npm config set strict-ssl false

然后再:

npm install --verbose

⚠️ 这会对所有 npm 请求关闭证书校验,外网环境不推荐。


4️⃣ 关于“看到安装进度”的部分

你现在已经加了:

npm install ... --verbose

只要 网络正常、证书没问题,你就会看到一大堆诸如:

npm http fetch GET ...
npm timing reify:loadTrees ...
[####........] reify: XX% ...

但目前安装过程在 第一步请求就失败了,所以只能看见 repeated 的 CERT_HAS_EXPIRED


建议你下一步这么做:

E:\my\fumi\E\myinstall\code\test\yewu\zidonghua\EqpMange\web 目录里依次试:

npm config set registry https://registry.npmmirror.com
npm install --verbose

如果还有错误,把新一段完整报错贴出来(尤其是最上面的几行和最后几行),我可以继续帮你看是源问题、时间问题还是代理问题。

你现在电脑上的 Node 是 v22.15.1,但很多 Vue3 / ESLint / Vite 老项目要求:

Node.js ≥ 16,推荐 v16.20.1(LTS)

最稳妥的办法是 安装多个 Node 版本并在项目间自由切换

下面给你 Windows 上最推荐、最实用的方式 👇


✅ 方法一:使用 nvm-windows(最推荐 / 企业开发通用)

Windows 官方的 node version manager:
nvm-windows(不是 Linux 的 nvm)。

1️⃣ 下载 nvm-windows

打开 GitHub(国内也能访问):
👉 https://github.com/coreybutler/nvm-windows/releases

下载:

  • nvm-setup.exe(安装包)

双击安装即可。


2️⃣ 安装 Node 16.20.1

安装完成后,在 CMD 或 PowerShell 输入:

nvm install 16.20.1

等待几秒即可。

你可以输入:

nvm list

会看到两套版本:

  * 22.15.1 (current)
    16.20.1

3️⃣ 切换到 Node 16.20.1

进入你的项目目录 web 并切换 Node:

nvm use 16.20.1

如果成功,会看到:

Now using node v16.20.1 (64-bit)

4️⃣ 验证版本

node -v
npm -v

结果应该变成:

v16.20.1
8.x.x(或 7.x.x)

⚠️ 注意:Anaconda 的虚拟环境对 Node 没有影响

你看到的提示 (EqpManage) 来自 Anaconda 的 Python 环境,它不会影响 Node 和 npm,放心。

Node 的切换完全由 nvm-windows 管理。


🎉 这样做的好处

  • 同时保留 Node 22 / 18 / 16,不会冲突
  • 每个项目可以用它最兼容的 Node 版本
  • 切换速度超快,不需要重装 node

🔧 如果你已经装过 node(例如 v22.15.1)

nvm-windows 会自动接管,不需要卸载旧版本。
如果担心冲突,也可以:

  1. 先卸载旧 Node
  2. 再安装 nvm-windows

但一般不需要。


📌 小结(最简单的操作顺序)

# 1. 安装 nvm-windows
# 2. 安装 Node 16
nvm install 16.20.1

# 3. 切换 Node 版本
nvm use 16.20.1

# 4. 验证
node -v
npm -v

切换后,再在你的 web 项目里:

npm install --legacy-peer-deps
npm run dev

如果你愿意,我可以继续帮你检查:

  • 你的 web 目录的 package.json 的脚本
  • npm 的依赖安装冲突
  • 前端项目启动失败的问题

你只需要把 package.json 的前 50 行"scripts" 部分贴出来即可。

好,这里已经很明确问题出在哪儿了:

nvm root  -> E:\my_install\app\nvm
NVM_HOME  -> E:\my_install\app\nvm
NVM_SYMLINK -> D:\nvm4w\nodejs   ❌

也就是说:

  • nvm 自己装在 E 盘E:\my_install\app\nvm
  • 但是“当前 node.exe 的链接目录”(NVM_SYMLINK)被设置成了 D 盘的 D:\nvm4w\nodejs
  • 这个目录十有八九不存在/不在 PATH 里,所以 nvm use 16.20.1 虽然提示成功,但系统根本找不到 node.exe,自然就出现:
'node' 不是内部或外部命令

我们要做的事就是:把这个 NVM_SYMLINK 目录改成一个真实存在并且在 PATH 里的目录

下面一步一步来 👇


第一步:改 nvm 的 settings.txt 配置

  1. 在 CMD 里打开配置文件:

    notepad E:\my_install\app\nvm\settings.txt
    
  2. 找到类似这一行(大致长这样):

    root: E:\my_install\app\nvm
    path: D:\nvm4w\nodejs
    
  3. path: 这一行改成一个你想用来放 node.exe 的目录,比如最常用的:

    path: C:\Program Files\nodejs
    

    如果 C:\Program Files\nodejs 不存在,可以先用资源管理器新建这个文件夹。

  4. 保存并关闭记事本。


当前是:

echo %NVM_SYMLINK%
D:\nvm4w\nodejs   ❌

我们要让它和刚才 settings.txt 的 path 一样,比如:

setx NVM_SYMLINK "C:\Program Files\nodejs"

执行完会提示成功,但注意setx 只对“新开的窗口”生效,当前 CMD 不会立刻更新。


第三步:确保新目录在 PATH 里

  1. 打开 环境变量 设置(图形界面):

    • 右键 此电脑 → 属性 → 高级系统设置
    • 点击 环境变量
    • 在“系统变量”或“用户变量”中找到 Path → 双击
  2. 确认列表里有一条:

    C:\Program Files\nodejs
    
    • 如果没有:点击“新建”,填上这条路径,确定保存
    • 如果有旧的 Node 路径,例如 E:\my_install\app\nodejs\ 之类,可以选中 → 删除,避免冲突
  3. 全部点“确定”退出。


第四步:重新打开 CMD,切换 node 版本

⚠️ 现在要关闭所有之前开的 CMD 窗口,然后:

  1. 新开一个 CMD(或 PowerShell)

  2. 先确认变量没问题:

    echo %NVM_SYMLINK%
    

    理想结果:

    C:\Program Files\nodejs
    
  3. 执行切换:

    nvm use 16.20.1
    
  4. 验证:

    node -v
    npm -v
    where node
    

    预期结果类似:

    v16.20.1
    8.x.x
    C:\Program Files\nodejs\node.exe
    

如果能看到这些,说明 node 版本管理已经完全正常了 🎉


第五步:回到你的前端项目继续安装依赖

回到你的前端目录:

cd E:\my\fumi\E\myinstall\code\test\yewu\zidonghua\EqpMange\web

npm install --registry=https://registry.npmjs.org --legacy-peer-deps
:: 或你之前用的 npmmirror 源
:: npm install --registry=https://registry.npmmirror.com --legacy-peer-deps

成功后:

npm run

看一眼有哪些脚本(有 devnpm run dev,没有就用 start / serve 等)。


如果你按上面做完,node -v 还是失败,或者 where node 指向了奇怪的位置,把这三条命令的输出贴给我:

echo %NVM_HOME%
echo %NVM_SYMLINK%
type E:\my_install\app\nvm\settings.txt

我可以直接根据内容帮你把路径改到位。

posted @ 2023-03-11 15:33  凫弥  阅读(2709)  评论(1)    收藏  举报