You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue项目GitHub Actions遇node-pre-gyp报错,构建失败求助

问题分析

从报错日志和配置来看,问题出在两个核心层面:

  1. Node版本不匹配:你的GitHub Actions配置里声明使用Node.js 16.x,但实际运行时用了runner系统默认的Node.js 18.14.2(日志明确显示node@18.14.2)。而canvas@2.9.3没有针对Node.js 18(ABI v108)的预编译二进制包,触发了源码编译流程。
  2. 系统依赖缺失:源码编译canvas需要pangocairo等系统库,GitHub Actions的ubuntu-latest runner默认未安装这些依赖,直接导致编译失败。

本地构建正常的原因是:你本地使用的是Node.js 16(对应canvas有预编译包,无需源码编译),或者本地已提前安装了pangocairo类依赖。

解决方案

优先推荐方案1,无需修改依赖版本,适配原有配置逻辑:

方案1:强制使用Node.js 16.x(匹配配置声明)

你的Actions配置里定义了node-version: [16.x]但未实际应用,需添加setup-node步骤固定Node版本:
修改GitHub Actions配置文件:

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [16.x]
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2
      # 新增步骤:固定Node版本为配置声明的16.x
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
          cache: 'npm' # 可选:缓存npm依赖,加速后续构建
      - name: Build the API
        run: make build-api
      - name: Build the Admin UI
        run: make build-client
      - name: Build the Mobile App UI
        run: make build-mobile

此方案会强制使用Node.js 16,canvas@2.9.3有对应预编译二进制包,跳过源码编译流程,自然规避系统依赖缺失问题。

方案2:升级canvas版本以支持Node.js 18

如果需要保留Node.js 18环境,需升级canvas到支持Node.js 18的版本(v2.11.0及以上):

  1. 在项目client目录下执行命令:
npm update canvas --save
  1. 提交package.json和package-lock.json的变更到PR即可。

方案3:安装系统依赖(仅当必须源码编译时使用)

若不想修改Node版本或canvas版本,可在构建前手动安装canvas源码编译所需的系统依赖:
在Actions的build-client步骤前新增:

- name: Install canvas build dependencies
  run: sudo apt-get update && sudo apt-get install -y libpango1.0-dev libcairo2-dev libjpeg-dev libgif-dev librsvg2-dev
为什么之前构建正常?

GitHub Actions的ubuntu-latest镜像会定期更新,之前的镜像默认Node.js版本为16,近期升级到了18,而你的配置未明确固定Node版本,导致自动使用了更高版本的Node,触发了兼容性问题。

内容的提问来源于stack exchange,提问作者VitoCK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 03:17:06