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

npm ERR! path /Users/*/Desktop/task_work_all/node_modules/canvas

问题发现

在一个新项目中执行 npm install 命令时,安装过程异常终止。控制台输出了一系列警告和错误信息,其中最关键的是:

npm ERR! code 1
npm ERR! path /Users/xuejintao/Desktop/task_work_all/baidu/netdisk-global/doc-view/node_modules/canvas
npm ERR! command failed
npm ERR! command sh -c node-pre-gyp install --fallback-to-build --update-binary

这个错误明确指出问题出在 canvas 包的安装过程中。

问题定位

进一步分析错误日志,发现了两个关键信息:

  1. 预编译二进制文件下载失败:
npm ERR! node-pre-gyp ERR! install response status 404 Not Found on https://github.com/Automattic/node-canvas/releases/download/v2.11.2/canvas-v2.11.2-node-v115-darwin-unknown-arm64.tar.gz
  1. 源代码编译失败:
npm ERR! /bin/sh: pkg-config: command not found
npm ERR! gyp: Call to 'pkg-config pixman-1 --libs' returned exit status 127 while in binding.gyp. while trying to load binding.gyp

这表明安装过程首先尝试下载预编译的二进制文件,失败后又尝试从源代码编译,但系统缺少必要的工具和库。

问题根因

经过分析,问题的根本原因可归结为以下几点:

  1. 架构差异:M1 Mac 使用 ARM 架构(arm64),而非传统的 x86_64 架构。
  2. 预编译文件缺失canvas 包没有为特定的 Node.js 版本和 M1 Mac 组合提供预编译的二进制文件。
  3. 编译依赖缺失:系统缺少从源代码编译所需的必要工具和库。

这个问题的核心在于 M1 Mac 的相对新颖性。许多 npm 包,尤其是那些包含原生代码的包,可能还未全面支持 arm64 架构。

解决方案

了解问题根源后,解决方案变得明确:

  1. 安装必要的系统依赖:
brew install pkg-config cairo pango libpng jpeg giflib librsvg
  1. 重新运行 npm install

通过提供编译 canvas 包所需的系统级依赖,使得在 M1 Mac 上能够实现对源代码进行编译

开发悉知

  1. 了解开发环境:不同硬件架构可能带来特定挑战,尤其是在使用原生代码包时。
  2. 理解包安装机制:了解 npm 如何处理原生模块安装有助于快速诊断和解决问题。
  3. 维护开发环境:及时更新开发环境中的构建工具和库可预防潜在问题。

http://www.mrgr.cn/news/62212.html

相关文章:

  • 代码编辑器 | Visual Studio Code v1.95.0
  • LaTeX 特殊符号、加帽子符号、横线和波浪线、绝对值符号
  • 第五课 LMDeploy 量化部署 LLM 实践
  • Rust 力扣 - 59. 螺旋矩阵 II
  • Android13预置应用及授权开发
  • ios 快捷指令扩展(Intents Extension)简单使用 swift语言
  • 【动态规划之斐波那契数列模型】——累加递推型动态规划
  • Java Condition 源码
  • Java避坑案例 - “激进”的线程池扩容策略及实现
  • 串口电路设计
  • 3216. 交换后字典序最小的字符串
  • 时间序列分类任务---tsfresh库
  • vscode的一些使用心得
  • Leetcode148,109以及二者的合并 -> Tencent面试算法题 - 无序双向链表转BST
  • 蓝桥杯 python day01 第一题
  • 春季测试 2023 我的题解
  • 达梦数据库在终端/控制台交互查询SQL语句,查询结果导出excel
  • Openjudge:向量点积计算
  • 【Vulnhub靶场】DC-7
  • YOLOv9模型重新参数化,将yolo.pt转为yolo-converted.pt
  • 长文 | 我如何使用 git
  • 【JavaEE】【多线程】进阶知识
  • Comsol CPU水冷散热系统流热固多场耦合仿真
  • el-datepicker此刻按钮点击失效
  • ts:常见的内置数学方法(Math)
  • 面向对象编程——重写和多态