見出し画像

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だとなんか手動のほうが楽そうなくらい辛そうだったので…
幾分よくなることを祈ってます。

おわり


サポートして頂けたらお礼にウルトラハイパーデラックスミラクルキラッキラな笑顔で感謝します