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

GitHub Actions执行npm ci时github协议依赖遇权限拒绝错误

解决方案

方法一:在CI流程中替换Git协议(推荐)

在你的GitHub Actions工作流里,执行npm ci之前添加一步Git配置,让所有指向GitHub的SSH请求自动转为HTTPS请求,无需修改本地依赖配置即可解决CI环境的权限问题:

修改后的node.js.yml:

name: Node.js CI

on:
  push:
    branches: [ "master" ]
  pull_request:
    branches: [ "master" ]

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [12.x, 14.x, 16.x]

    steps:
    - uses: actions/checkout@v3
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v3
      with:
        node-version: ${{ matrix.node-version }}
        cache: 'npm'
    # 添加这一步,替换Git协议
    - run: git config --global url."https://github.com/".insteadOf "ssh://git@github.com/"
    - run: npm ci
    - run: npm test

原理说明

GitHub Actions的运行环境默认没有配置可访问GitHub的SSH密钥,而github:协议的npm依赖默认会用SSH方式拉取仓库。通过上述Git配置,所有ssh://git@github.com/开头的仓库地址都会被替换为https://github.com/,HTTPS方式可以匿名拉取公共仓库,完美适配CI环境,同时本地开发环境不受任何影响。

备选方法:临时修改package.json(不推荐)

如果上述方法不适用,也可以在CI流程中临时修改package.json的依赖地址,将github:协议替换为HTTPS地址:

# 在npm ci前添加
- run: sed -i 's/github:uNetworking\/uWebSockets.js#v20.10.0/https:\/\/github.com\/uNetworking\/uWebSockets.js.git#v20.10.0/' package.json

但这种方法需要维护版本号同步,不如第一种方法灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 07:24:23