GitHub Packagesでnpm packageを公開する際の罠
Mediumがくっっっっっっそ重くて(たぶん内部エラー、CDN乗るまで待ってるとか…? いやそんな馬鹿なことはしないよね…) 書いた記事もまともに読めんのでここに一時退避
TL;DR
packageのscopeを指定し忘れていると、 yarn publish はsuccessするのに、GitHubのPackagesには公開されない。
Details
package.jsonに
"publishConfig": {
"registry": "https://npm.pkg.github.com/"
}
と書くと、npm registryとしてGitHub Packagesを利用できる。なおログインの方法などいろいろ巷には転がっているが、公式のものを見るのが一番わかりやすくて良い。
package.jsonに書いておくと、そのproject固有にできるので良い。
なお yarn login や npm login をせずとも、publishするタイミングでログインできるので必要ない。
2FAを使っている場合は、 https://github.com/settings/tokens ここでtokenを発行してそれをPasswordとして使うとよい。
さぁこれで準備ができた。あとはpublishするだけ…と思いきや。
publishすると、
yarn publish v1.22.4
[1/4] Bumping version...
info Current version: 1.0.0
question New version: 1.0.0
[2/4] Logging in...
info npm username: qs-f
info npm email: qsf@de-liker.com
question npm password:
success Logged in.
[3/4] Publishing...
success Published.
[4/4] Revoking token...
success Revoked login token.
✨ Done in 4.74s.
とでた。さぁ出来たかなと見てみると、ない。どこにもない。
ここにもないし、
ここにもない。(今はあるけど)
これは困った… と思って、よくよくGitHub公式のものを読み返すと、
プロジェクト内にあるローカルの .npmrc ファイルか、package.json の publishConfig オプションを使って、スコープのマッピングを設定できます。 GitHub Packagesはスコープ付きのnpmパッケージのみをサポートしています。 スコープ付きパッケージには、@owner/name というフォーマットの名前が付いています。 スコープ付きパッケージの先頭には常に @ 記号が付いています。 スコープ付きの名前を使うには、package.json の名前を更新する必要がある場合があります。 たとえば、"name": "@codertocat/hello-world-npm" のようになります。
と書いてありました。私はscopeなしのnpmが大の嫌いなので、自分のnpmjs.comでは
すべて @creatorqsf scopeつきで公開しているの ですが、yarn init時はタンタンターンとエンターor|yで進んでしまうので(だってlicenseもISCじゃなくてちゃんとMITだし…)、すっかり忘れていました。
でもだったらGitHub、
[3/4] Publishing...
success Published.
[4/4] Revoking token...
success Revoked login token.
とかだすのおかしくないですか…? これもしかして自分のscopeなしpackageがどっかで公開されてたりするのかな…だとしたら怖いな…
次は重い重い重い腰をあげて(実に3年ごしの願いを実現するときが…)、いよいよずっとやりたかった、tagのpushで自動npm package publishをやります… npmjs.comとGitHub actionsだとなんか手動のほうが楽そうなくらい辛そうだったので…
幾分よくなることを祈ってます。
おわり
サポートして頂けたらお礼にウルトラハイパーデラックスミラクルキラッキラな笑顔で感謝します