テクノロジー · 実用ガイド

npm ETARGET?registry・要求範囲・公開済み版を先に証明する

「No matching version found」は未公開版、tag/range不一致、scope別private registry、古いmirror metadataで起こり得ます。cacheやlockfileを消す前に欠けた一致を特定します。

package要求がregistryに届き、利用可能・tag付き・欠落versionへ分岐するオリジナル図。
オリジナルイラスト:dependency変更前に実効registryを確認します。 Watch at Ease

npm が ETARGET または「No matching version found」を返したら、完全なpackage specを保存し、npmが実際に使ったregistryで検証します。決め手はrequester、registry endpoint、公開済みversion集合、dist-tag対応であり、cacheやlockfileを消した後の偶然の変化ではありません。

正確なspecとrequesterを保存する

ファイルを変える前にETARGET行全体をコピーします。package名、exact version、rangeまたはtag、npm version、要求元がpackage.json、package-lock.json、workspace、生成template、transitive dependencyのどれかを記録します。両manifestを検索し、transitiveならinstall logとdependency treeで親を特定します。

npmが実際に使う同じregistryを調べる

npm config get registryを実行し、tokenを表示せずproject・user・CIのnpmrcにあるscope別registryを確認します。同じendpointにnpm view <package> versions --jsonとnpm view <package> dist-tags --jsonを実行します。npmjs.comに見えるversionがprivate registryやmirrorにもあるとは限りません。

exact version・range・tagを分ける

4.2.1のexact requestは公開済みである必要があります。^4.2.1のrangeは返されたversionの少なくとも一つに一致する必要があります。latest、beta、nextはversionを指す可動dist-tagです。Git tag、Node.js version、GitHub releaseをnpm package versionと混同しないでください。

prereleaseと公開境界を確認する

SemVerでは3.0.0-beta.9は通常版3.0.0よりprecedenceが低く、同じ識別子ではありません。registryにprereleaseしかなければexact 3.0.0は一致しません。rangeを変える前にpublish timeとdist-tagを調べ、失敗specを保存して未公開・unpublish・一時欠落を区別します。

manifest・lockfile・mirrorを別々に監査する

同じregistryのnpm viewでversionが見えるなら、失敗したCI/IDEのregistry URL、scope mapping、proxy、credentialsを比較します。package.jsonとpackage-lock.jsonで直接要求かtransitiveかを特定します。private proxyは管理者が支援するmetadata refreshを使い、原因判明前にlockfile削除やcache強制消去をしません。

証明した不一致だけ直す

versionが存在しないなら互換性を確認してtemplate/dependencyを修正します。dist-tagが予想外なら検証済みexact versionを使うかpublisherを待ちます。mirrorが古いならmirrorを更新し、CIだけ違うならcredentialを漏らさずscope registryを合わせます。最後にnpm view、install、lockfile diffを再確認します。

manifestとlockfileを最新・古いregistry metadataと比較するオリジナル図。
オリジナルイラスト:要求spec、version集合、registry endpointを分けます。 Watch at Ease