1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【GitHub Actions】jsonに「link:」が入っているとnpm installできない

Posted at

GitHub Actionsでのデプロイを試みていた際に発生したエラーがなかなか解消できずに詰まってしまったので状況を共有します。

発生したエラーと状況

sample.yaml
name: Build

on:
  push:
    branches:
      - main

jobs:
  build:
    name: Build
    runs-on: ubuntu-latest
    steps:
      - name: checkout
        uses: actions/checkout@v4

      - name: setup-node
        uses: actions/setup-node@v4
        with:
          node-version: "20"
          cache: npm

      - name: install
        run: npm install 

上記のyamlファイルの記述でGit pushを行いインストールまで進めるか調査していました。
すると次のようなエラーが発生してActionがFailureになりました。

npm error code EUNSUPPORTEDPROTOCOL
npm error Unsupported URL Type "link:": link:dataconnect-generated/js/default-connector
npm error A complete log of this run can be found in: /home/runner/.npm/_logs/(デバッグログのログファイル).log
Error: Process completed with exit code 1.

今回発生したエラーの原因を見てみます。

前提:GitHub Actionsの「code 1」エラーについて

上記の記事が概念の理解として非常に参考になりました。

結論としては 「構文エラーではなく処理の結果としてエラーになっている場合」に出るエラー文のようです。

なので今回の場合はyamlの記述自体には問題がないので処理の過程で出たエラーを見てみると良いこととなります。

今回のエラーで起きた問題点

改めてエラーの文章を見てみましょう。

npm error Unsupported URL Type "link:": link:dataconnect-generated/js/default-connector
この部分が原因のようです。

上記のエラー文を日本語訳してみるとdataconnect-generated/js/default-connectorという読み込みファイルの「link:」という形式がサポートされていないことが原因と推測されます。

そこで該当の部分(firebaseをインストールした時に生成された部分)を見てみると次のような記載がありました。

package.json
  "dependencies": {
    "@firebasegen/default-connector": "link:dataconnect-generated/js/default-connector",
  },

問題となっているlink:の記述を発見できました。この部分はfirebaseを使うために生成していたフォルダを指し示すものです。

さらに具体的な原因については下記の記事が参考になりました。

link:プロトコルはYarnの機能であり、npmではサポートされていません。
そのため、npmはこの依存関係を解釈できず、EUNSUPPORTEDPROTOCOLエラーが発生します。

つまり、今回のエラーの直接的な要因は

  • jsonにlink:の記載が含まれていること
  • 上記の状態でインストール方法としてnpmを使用したこと

の2つでした。

エラーの対処方法

つまり、対処法としては「link:でない指定をすること」か「npm以外でインストールすること」が考えられそうです。

実際の処理方法は先ほどの記事に記載がありました。

可能であれば、npmの代わりにYarnを使用してプロジェクトを管理します。
Yarnはlink:プロトコルをサポートしています。

もしくは

package.jsonからlink:を削除して、適切なバージョン番号やパスに置き換えます。
例えば、ローカルパッケージを使用したい場合は、npmのfile:プロトコルを使用できます。

この2種のどちらかで解消できるとのことでした。

今回のケースではjsonファイルの記載を変更する方法を選択しました。
具体的には以下のように修正しました。

package.json
  "dependencies": {
    "@firebasegen/default-connector": "file:dataconnect-generated/js/default-connector",
  },

このようにjsonファイルを修正することでnpm installの処理がGitHub Action上で通るようになりました。

結論/まとめ

  • GitHub Actionsのyamlファイルにnpm系の指示を記載する時にはjsonファイルを一度確認してみましょう
  • link:の記載があったらfile:形式に直してみましょう
  • もしくはnpmの処理をyarnに修正してみまsy
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?