package.json に自分のリポジトリの URL を書いて難を逃れた話

May 22nd, 2023 github programming react node.js

定かではないが 2020 年くらいの話である.思い出したので記事にした.

状況がピンポイントすぎるため 99.9% の人には役立たないだろう.

概要

前提

状況

ハッカソンに参加し,個人でプロダクト(フロントは React,サーバは Node.js)を開発していた.

その際,フロント側に必要な機能をちょうどよく提供してくれるライブラリを見つけたため使うこととした.ライブラリは更新もそれなりの頻度で継続しており,ダウンロード数も当時で 200,000 以上であったため採用した.

開発が佳境に差し掛かり,最後の重要な機能を実装しようとしたらエラーが発生した.ライブラリのとあるメソッドが定義されていない旨のエラーで.インストールしたソースコードを見ても確かに該当するメソッドが定義されていなかった.

すぐにライブラリのリポジトリに issue を立てたが,ハッカソンの発表会 2 日前なので開発者の修正が間に合う可能性はほぼ 0 である.これはさすがに詰んだと思った.

原因

リポジトリの issue を確認すると過去に似た問題があり,リポジトリのコードを確認すると該当するメソッドが記述されていた.どうやら GitHub リポジトリに push されていたコードと npm に公開されているコードが異なっていたようだ.

解決策

issue を立てたので,開発者が修正してくれるのと待つのが基本となる.事実,数日後に修正された.

しかし時はハッカソン終盤,修正を待たずになんとかしなければならない.ググりまくって情報を集めた結果,とった手法は以下.

  1. ライブラリのコードを自分のリポジトリにフォークする.
  2. 自分でコードを修正してビルドし,push する.
  3. React の package.json に自分のリポジトリの URL を記述してコードをインストールする.

3 の手法はこのときはじめて知った.バージョン指定はよく行っていたが,それ以外にも様々な指定のしかたが存在する.

↓例えばこんな感じらしい.

{
  "dependencies": {
    "foo": "1.0.0 - 2.9999.9999",
    "bar": ">=1.0.2 <2.1.2",
    "baz": ">1.0.2 <=2.3.4",
    "boo": "2.0.1",
    "qux": "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0",
    "asd": "http://asdf.com/asdf.tar.gz",
    "til": "~1.2",
    "elf": "~1.2.3",
    "two": "2.x",
    "thr": "3.3.x",
    "lat": "latest",
    "dyl": "file:../dyl"
  }
}

↓ドキュメントに書いてある.ちゃんと読め過去の我.

https://docs.npmjs.com/cli/v9/configuring-npm/package-json#dependencies

ビルドしたコードを push する際のディレクトリ構成で少し手間取ったが,無事最新のコードをインストールして動作させることができた.

packsge.json にはこんな感じに書いた.

"@hogehoge/api": "git+https://github.com/taroosg/hogehoge-api.git",

感想

過去最高レベルに焦ったハマり方だったが「自分でなんとかする」「必要とあらば無理にでも動かす」力は間違いなくアップしたので良い経験となった.

以上だ( `・ω・)b