参加したプロジェクトが yarn の lock ファイルだったので久々に yarn install をしようとしたら GitHub package になっている独自ライブラリのインストールがエラーになってしまう問題にハマってしまったのメモ
状況
node.js npm のバージョン管理は Voltaを使用
Volta で node.js v18 系をインストールした際に付いてきた yarn (4.0.0-rc.50
) をそのまま使用してる
プロジェクトに独自に作成された GitHub packages を使用
GitHub PAT (personal access tokens
) を .npmrc
に記述
.npmrc
@my-package:registry=https://npm.pkg.github.com //npm.pkg.github.com/:_authToken=${MY GITHUB PERSONAL ACCESS TOKEN} always-auth=true
yarn install
で独自パッケージが Package not found 404 になってしまう
$ yarn install YN0000: · Yarn 4.0.0-rc.50 ➤ YN0000: ┌ Resolution step ➤ YN0035: │ @my-package/some-package@npm:1.0.0: Package not found ➤ YN0035: │ Response Code: 404 (Not Found) ➤ YN0035: │ Request Method: GET ➤ YN0035: │ Request URL: https://registry.yarnpkg.com/@my_package%2fsome-package ➤ YN0000: └ Completed in 0s 854ms ➤ YN0000: · Failed with errors in 0s 857ms
@my_package
は https://npm.pkg.github.com
を見に行ってほしいが https://registry.yarnpkg.com
から探そうとしているように見える
元のプロジェクトが yarn v1 系で v2 以降は設定の書き方が変更になっていたことが原因
yarn v2 以降では .npmrc
や .yarnrc
ではなく .yarnrc.yml
を使用する
Migrating from 1.x / npm
Breaking changes
Modern uses a different style of configuration files than Classic. While mostly invisible for the lockfile (because we convert them on the fly), it might cause issues if you rely on
.npmrc
or.yarnrc
files.
- Yarn Modern now uses
.yarnrc.yml
. Any other file is now ignored - this includes.npmrc
.- As evidenced by the new file extension, the Yarnrc files are now to be written in YAML.
Migration steps
- Convert your
.npmrc
and.yarnrc
files into.yarnrc.yml
yarn v2 以降では .yarnrc.yml
が使用され .npmrc
があったとしても無視される。トノコト
使っていたのが yarn v4 だったので .npmrc
に GitHub packages や PAT の設定をしても無視されていたというのが原因だった
.yarnrc.yml
に GitHub packages と PAT (personal access tokens) の設定する
.yarnrc.yml
nodeLinker: node-modules npmScopes: 'my-package': npmAlwaysAuth: true npmRegistryServer: 'https://npm.pkg.github.com/' npmPublishRegistry: 'https://npm.pkg.github.com/' npmAuthToken: ${MY GITHUB PERSONAL ACCESS TOKEN}
ポイントとしては @my-package/some-package
を使っている場合 npmScopes
は @my-package
ではなく @
無しで my-package
と記述すること
@
ありで @my-package
とすると Package not found になってしまう
所感
npm で十分だと感じていたので久々に yarn を使ったら v2 以降で結構変わっていたみたいで、検索しても .yarnrc
に設定を書く v1 系の方法ばかりがヒットしてハマってしまった。
個人的に yarn v1 系なら .npmrc
で設定ができるが最新の npm の方がパフォーマンスが良いと思っているのでチーム開発ならバージョン差異が出やすい yarn より npm の方が良いんじゃないかなという気がしました。
チーム全員が Volta を使っているなら yarn, npm のバージョンも固定できるので新しく join した人が環境構築で躓くことも少なくなりそうだから良いんじゃないかなと思います。(ただ会社支給の PC なら良いけど、ツールの指定は結構宗教問題にもなりがちなので難しそうだし結局 npm にしておくほうが安牌なんじゃないかな〜)
I just had this problem for a couple of days and the solution is simple, DO NOT USE YARN when publishing.
cf. google cloud platform - How to fix 404 error when installing npm package from GCP artifact registry with yarn? - Stack Overflow
yarn 使わないのが解決策と書いてる Stackoverflow には笑ちゃった
我、環境設定のトラブル踏み抜きがち…
おわり
[参考]
- Managing your personal access tokens - GitHub Docs
- Step-by-step | Yarn
- yarn does not honor authentication settings in .npmrc · Issue #4451 · yarnpkg/yarn · GitHub
- Settings (.yarnrc.yml) | Yarn
- Personal Access Tokenをコミットせずに、Github PackagesをPrivateに使う方法 - Qiita
- Yarn install from gitlab package registry not working with instance-level - #4 by palvol - General - GitLab Forum
- 型定義リポジトリをGitHub Packagesで社内限定公開する(yarnでもnpmでも) - Qiita
- GitHub Packagesを使ってJavaScript libraryを管理する - Qiita
- About Yarn 4.0.0-rc.39
- npmとyarnとpnpmの違い2021
- まだyarnやnpmやpnpmの打ち間違いで消耗してるの?
※ 有料部分 最近読んでよかった本を書いているだけで特に何もありません。気になる方・投げ銭頂ける方はどうぞ!