GitHub Packagesでnpm packageを公開する際の罠
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.0question New version: 1.0.0[2/4] Logging in...info npm username: qs-finfo npm email: qsf@de-liker.comquestion 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だとなんか手動のほうが楽そうなくらい辛そうだったので…
幾分よくなることを祈ってます。
おわり