当前位置: 首页 > news >正文

解决 npm install canvas@2.11.2 失败的问题

文章目录

  • 前言
  • Mac 版
    • 安装系统依赖(macOS)
    • 确保 Xcode 命令行工具已安装
    • 将 npm 镜像源更改为淘宝镜像源
    • 全局安装 node-gyp
    • 清除 npm 缓存并开始安装
    • 安装成功
  • Windows 版
    • 安装 vscode
    • 将 npm 镜像源更改为淘宝镜像源
    • 全局安装 node-gyp
    • 清除 npm 缓存并开始安装
    • 安装成功


前言

项目中使用了 canvas npm包来实现 node 服务端数据成图的功能。但是在项目中使用 npm install 安装失败,经过各种和 AI 沟通的尝试后,终于指定版本的 canvas 安装成功,项目也运行成功,在此记录一下安装方法。


Mac 版

  • 操作系统:MacOS Sequoia 15.5
  • node版本:v15.14.0
  • npm版本:v7.7.6

安装系统依赖(macOS)

canvas 需要系统级图形库支持,使用Homebrew安装:

brew install pkg-config cairo pango libpng jpeg giflib librsvg

确保 Xcode 命令行工具已安装

xcode-select --install

将 npm 镜像源更改为淘宝镜像源

# 查看当前配置
npm config get registry
# 设置为淘宝镜像
npm config set registry https://registry.npmmirror.com/
# 恢复为官方镜像
npm config set registry https://registry.npmjs.org/

全局安装 node-gyp

node-gyp是一个Node.js的原生插件构建工具,用于编译C++扩展模块。很多Node.js模块,比如canvas,都包含C++代码,需要编译后才能在特定平台上运行。

npm install -g node-gyp

清除 npm 缓存并开始安装

# 清除npm缓存
npm cache clean --force
npm cache verify
# 删除指定文件
rm -rf node_modules package-lock.json
npm install

安装成功

执行 npm install 后,需要等待10分钟左右才会安装成功,进程会卡在 core-js@2.6.12 处,如下图:

等待中截图
在这里插入图片描述
安装成功截图
在这里插入图片描述


Windows 版

  • 操作系统:Windows 11
  • node版本:v15.14.0
  • npm版本:v7.7.6

安装 vscode

官网下载地址

在这里插入图片描述

将 npm 镜像源更改为淘宝镜像源

# 查看当前配置
npm config get registry
# 设置为淘宝镜像
npm config set registry https://registry.npmmirror.com/
# 恢复为官方镜像
npm config set registry https://registry.npmjs.org/

全局安装 node-gyp

node-gyp是一个Node.js的原生插件构建工具,用于编译C++扩展模块。很多Node.js模块,比如canvas,都包含C++代码,需要编译后才能在特定平台上运行。

npm install -g node-gyp

清除 npm 缓存并开始安装

# 清除npm缓存
npm cache clean --force
npm cache verify
# 删除指定文件
rmdir /s /q node_modules && del /f /q package-lock.json
npm install

安装成功

执行 npm install 后,很快就安装成功了,不会像 Mac 端卡着。如下图:

在这里插入图片描述

http://www.lryc.cn/news/579050.html

相关文章:

  • Go 语言开发中用户密码加密存储的最佳实践
  • Java 导出PDF 1、内容可以插入自定义表格 2、内容插入图片
  • python+uniapp基于微信小程序的南昌旅行指南系统nodejs+java
  • 时钟(6.25-26)
  • 快速说一下TDD BDD DDD
  • 【docker】修改 MySQL 密码后 Navicat 仍能用原密码连接
  • RabbitMQ使用topic Exchange实现微服务分组订阅
  • docker离线/在线环境下安装elasticsearch
  • IO--进程实操
  • 【新手小白的嵌入式学习之路】-STM32的学习_GPIO 8种模式学习心得
  • ai之RAG本地知识库--基于OCR和文本解析器的新一代RAG引擎:RAGFlow 认识和源码剖析
  • LeetCode--39.组合总和
  • Lua 安装使用教程
  • CRMEB Pro版v3.3源码全开源+PC端+Uniapp前端+搭建教程
  • 【C++】第十三节—stack、queue、priority_queue、容器适配器(介绍和使用+模拟实现+OJ题)
  • 客服机器人知识库怎么搭?智能客服机器人3种方案深度对比(含零售落地案例)
  • 去中心化身份:2025年Web3身份验证系统开发实践
  • 专题:2025AI营销市场发展研究报告|附400+份报告PDF汇总下载
  • 告别 ifconfig:openEuler 网络配置的现代化之路
  • 通俗理解JVM细节-面试篇
  • UI前端大数据处理策略优化:基于云计算的数据存储与计算
  • kotlin 通道trysend方法
  • ZYNQ学习记录FPGA(六)程序固化Vivado+Vitis
  • GO Web 框架 Gin 完全解析与实践
  • 【Unity】MiniGame编辑器小游戏(九)打砖块【Breakout】
  • 云上配送革命:亚矩云手机如何重塑Uber Eats的全球外卖生态
  • 服务器异常宕机或重启导致 RabbitMQ 启动失败问题分析与解决方案
  • 2025年Java常见面试题(持续更新)
  • Maven工具学习使用(十三)——Maven Wrapper命令解析与使用
  • 在设计提示词(Prompt)时,关于信息位置的安排z怎么 结合模型特性和任务目标