[1367]npm 安装 canvas 报错 node-gyp ERR

文章目录

    • [npm 安装 canvas 报错 node-gyp ERR](#npm 安装 canvas 报错 node-gyp ERR)
      • 遇到的问题:
      • 问题分析
      • [解决方案1:使用 windows-build-tools(简易方案)](#解决方案1:使用 windows-build-tools(简易方案))
      • [解决方案2:手动安装 Visual Studio Build Tools(推荐)](#解决方案2:手动安装 Visual Studio Build Tools(推荐))
      • 总结:
    • [Build Tools for Visual Studio 2022 如何下载](#Build Tools for Visual Studio 2022 如何下载)
    • [安装Visual Studio Build Tools后任然报错](#安装Visual Studio Build Tools后任然报错)
      • [方案1:配置镜像源 + 跳过编译](#方案1:配置镜像源 + 跳过编译)
      • [方案2:使用 MSYS2 安装 GTK(推荐)](#方案2:使用 MSYS2 安装 GTK(推荐))
      • [方案3:手动下载 GTK 完整包](#方案3:手动下载 GTK 完整包)

npm 安装 canvas 报错 node-gyp ERR

遇到的问题:

在使用 npm install 安装依赖时,很多朋友都会遇到类似这样的错误:

复制代码
npm ERR! gyp ERR! build error
npm ERR! node-pre-gyp ERR! build error
npm ERR! Failed to execute 'node-gyp configure ...'

如下图:

尤其是当项目 中包含 canvas 模块时,这种错误出现得非常频繁。

本文分享两种在 Windows 环境 下最常用的解决方式,第二种为推荐方案。

问题分析

canvas 模块是一个基于 C++ 实现的 Node.js 图形绘图库,在安装时需要进行 C++ 原生扩展编译,而 Node.js 的包管理器(npm)会调用 node-gyp 去执行编译操作。在 Windows 下,如果没有安装 Visual Studio 编译环境,就会导致编译失败,从而报出:

复制代码
npm ERR! gyp ERR! build error
npm ERR! node-pre-gyp ERR! not ok

解决方案1:使用 windows-build-tools(简易方案)

适用于 Node.js v16 及以下版本,一条命令自动搞定所需环境。

步骤如下:

1、以管理员身份运行 PowerShell(必须是管理员,否则会报权限错误)

2、执行命令:npm install --global --production windows-build-tools

3、等待安装完成(会自动安装 Python 和 C++ 构建工具)

过程可能需要几分钟。

4、再重新执行:npm install

如果顺利完成,说明环境已配置成功。

不过这个方案在新版 Node.js(v18、v20)上已经 不推荐使用,因此更稳定的方法是手动安装 Visual Studio 构建工具。

解决方案2:手动安装 Visual Studio Build Tools(推荐)

这是 最稳定、官方推荐 的方式,适用于所有 Node.js 版本。

如果你要长期开发、编译原生模块(例如 canvas、bcrypt、sharp 等),建议使用这一方法。

  1. 下载 并安装 Visual Studio Build Tools

前往微软官方下载页面:https://visualstudio.microsoft.com/visual-cpp-build-tools/

下载 "Build Tools for Visual Studio 2022" 安装包。

  1. 选择组件

安装时,在安装界面左侧选择:使用 C++ 的桌面开发(Desktop development with C++)

右侧勾选以下组件:

  • MSVC v143 - VS 2022 C++ 编译器和库
  • Windows 10 SDK 或 Windows 11 SDK
  • C++ CMake 工具(可选)
  1. 安装完成后

安装完成后,重新启动电脑 或重新打开命令行窗口,确保环境变量生效。

  1. 安装 canvas 模块:

在项目根目录执行:npm install canvas@2.11.2

如果之前安装失败过,可以先清除缓存:

复制代码
# 清除npm下载的缓存
npm cache clean  --force
# 删除node_modules目录
#rimraf node_modules
# 直接安装最新版本
npm install canvas@latest

为什么推荐第二种方式?

第二种(手动安装 Build Tools)方案虽然步骤多一点,但:

✅ 稳定性更好 ------ 不受 Node 版本限制

✅ 官方支持 ------ 与 node-gyp 完全兼容

✅ 一劳永逸 ------ 以后安装其他 C++ 扩展模块也不会再报错

而第一种方案 windows-build-tools 已经不再维护,对 Node.js 18+ 兼容性较差。

附加提示:纯前端项目是否需要 canvas?

如果你只是运行一个 Vue 项目,并没有手动用到 canvas(例如生成图片、二维码、图表等),

可以直接跳过这个模块安装,比如执行:npm install canvas@2.11.2 --ignore-scripts

这样可以避免 node-gyp 编译,快速完成安装。

总结:

canvas 报 node-gyp 错,是因为缺少 C++ 编译环境。

安装 Visual Studio Build Tools,一次解决所有编译型 npm 包的问题。


Build Tools for Visual Studio 2022 如何下载

地址:https://my.visualstudio.com/Downloads?q=Visual Studio 2022

地址2:https://visualstudio.microsoft.com/zh-hans/visual-cpp-build-tools/

https://visualstudio.microsoft.com/zh-hans/vs/older-downloads/


安装Visual Studio Build Tools后任然报错

这个错误信息非常关键!它明确告诉我们:编译环境已经就绪(VS2022已找到),但缺少 canvas 的核心依赖库 cairo.h

这是因为 canvas 在 Windows 上需要依赖 GTK 或其他第三方库,这些库不会随 Visual Studio 自动安装。现在你只需要手动提供这些依赖库即可。

🎯 最直接的解决方案:使用预编译二进制文件

既然你已经有了 VS2022 Build Tools,最省事的方式是强制使用预编译版本,完全跳过本地编译

方案1:配置镜像源 + 跳过编译

bash 复制代码
# 1. 清理缓存和旧文件
npm cache clean --force
rmdir /s node_modules 2>nul
del package-lock.json 2>nul

# 2. 设置环境变量,强制下载预编译文件
# 环境变量 set 命令设置的是临时变量,只对当前命令行窗口有效
# 如果你想在当前窗口立即取消这个变量,可以将其设为空值:set canvas_binary_host_mirror=
# 如果你用 setx 命令设置了永久环境变量,需要用 setx canvas_binary_host_mirror "" 来删除
set canvas_binary_host_mirror=https://registry.npmmirror.com/-/binary/canvas
set npm_config_canvas_binary_host_mirror=https://registry.npmmirror.com/-/binary/canvas

# 查看所有环境变量中是否还有 canvas_binary_host_mirror
set | findstr canvas

# 3. 安装 canvas(会优先下载 .node 文件)
npm install canvas@latest

# 设置 npm 全局配置
npm config set timeout 600000
npm config set fetch-retry-mintimeout 20000
npm config set fetch-retry-maxtimeout 120000

如果 npm 下载一直超时,可以试试 cnpm:

bash 复制代码
# 使用淘宝 npm 镜像
# npm config set registry https://registry.npmmirror.com

# 安装 cnpm
npm install -g cnpm --registry=https://registry.npmmirror.com

# 使用 cnpm 安装(它默认使用镜像,且超时时间更长)
cnpm install canvas@latest

方案2:使用 MSYS2 安装 GTK(推荐)

MSYS2 是 Windows 上最流行的 Unix 工具链和库提供者,比 gvsbuild 更稳定。

  1. 安装 MSYS2

    • 下载安装包:https://www.msys2.org/
    • 运行安装程序,建议安装在 C:\msys64
    • 安装完成后,运行 "MSYS2 MSYS" 终端
  2. 在 MSYS2 中安装 GTK 开发库

在 MSYS2 终端中依次执行:

bash 复制代码
# 更新包数据库
pacman -Syu

# 如果提示关闭终端,就关闭重新打开,再执行一次
pacman -Syu

# 安装完整的 GTK3 开发包(包含所有依赖)
pacman -S mingw-w64-x86_64-gtk3

# 单独确认这些关键库已安装
pacman -S mingw-w64-x86_64-cairo mingw-w64-x86_64-pango mingw-w64-x86_64-librsvg mingw-w64-x86_64-libpng mingw-w64-x86_64-giflib mingw-w64-x86_64-jpeg-turbo mingw-w64-ucrt-x86_64-libjpeg-turbo
  1. 配置环境变量
    • Win + R,输入 sysdm.cpl,进入"高级"→"环境变量"

    • 系统变量中:

      • 编辑 Path,添加 C:\msys64\mingw64\bin
      • 新建 INCLUDE,值为 C:\msys64\mingw64\include
      • 新建 LIB,值为 C:\msys64\mingw64\lib
      • 新建 PKG_CONFIG_PATH,值为 C:\msys64\mingw64\lib\pkgconfig
    • 重启命令行终端使环境变量生效

重启命令行终端,然后验证:

bash 复制代码
# 检查头文件是否存在
dir C:\msys64\mingw64\include\cairo.h

# 检查库文件是否存在
dir C:\msys64\mingw64\lib\libcairo.a

# 检查 pkg-config 是否能找到 cairo
pkg-config --cflags cairo
  1. 安装 canvas

    bash 复制代码
    npm install canvas@latest

方案3:手动下载 GTK 完整包

如果 MSYS2 安装太慢,可以从这里下载预编译包:

  1. 下载 GTK 的 Windows 版本:https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer/releases
  2. 安装到 C:\gtk
  3. 配置环境变量:
    • Path 添加 C:\gtk\bin
    • 新建 INCLUDEC:\gtk\include
    • 新建 LIBC:\gtk\lib

为什么没有 include 目录?

预编译的 GTK 包通常分为两种:

  • 运行时(Runtime)包:只包含 bin、etc、share 等目录,用于运行已有的 GTK 程序。
  • 开发包(Dev/Devel 包):包含 include、lib、lib/pkgconfig 等目录,供开发者编译程序使用。

你安装的版本缺少 include 目录,说明它属于前者,如果缺少include 目录,不能解决该问题。

参考:https://blog.csdn.net/m0_73457571/article/details/153831434

https://blog.csdn.net/weixin_44200553/article/details/158849470

https://blog.csdn.net/junxuezheng/article/details/151117487

相关推荐
智脑API1 小时前
Codex config.toml check_for_update_on_startup 怎么关闭?离线环境与版本提醒排查
运维·服务器·前端
存在的五月雨1 小时前
前端布局-flex
前端
Zzj_tju2 小时前
Tool-Using LLM 论文精读路线:从 ReAct 到可验证工具调用
前端·react.js·前端框架
To_OC9 小时前
别再瞎写 React Router!7 个高频踩坑点一次性讲透
前端·javascript·react.js
岭南灯火11 小时前
前端通用交互式几何编辑器的开发经验
前端·设计模式·架构
岭南灯火11 小时前
前端通用交互式几何编辑器的设计法则 7 - 设计模式与原则
前端·设计模式·架构
岭南灯火11 小时前
前端通用交互式几何编辑器的设计法则 4 - 绘制、悬停与编辑
前端·设计模式·架构
岭南灯火11 小时前
前端通用交互式几何编辑器的设计法则 3 - 数据对象的设计
前端·javascript·架构
Jackson__11 小时前
从 LLM 到 Agent:一篇文章搞懂 AI 圈热词!
前端·agent·ai编程