Vue项目GitHub Actions遇node-pre-gyp报错,构建失败求助
问题分析
从报错日志和配置来看,问题出在两个核心层面:
- 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)的预编译二进制包,触发了源码编译流程。 - 系统依赖缺失:源码编译
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及以上):
- 在项目
client目录下执行命令:
npm update canvas --save
- 提交
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
相关产品推荐
相关产品推荐

