GitHub Packagesでnpm packageを公開する際の罠

Scopeに気をつけて!

たふみ
DE LIKER
5 min readJul 21, 2020

--

TL;DR

packageのscopeを指定し忘れていると、 yarn publish はsuccessするのに、GitHubのPackagesには公開されない。

Details

package.json

と書くと、npm registryとしてGitHub Packagesを利用できる。なおログインの方法などいろいろ巷には転がっているが、公式のものを見るのが一番わかりやすくて良い。

package.jsonに書いておくと、そのproject固有にできるので良い。
なお yarn loginnpm login をせずとも、publishするタイミングでログインできるので必要ない。

2FAを使っている場合は、 https://github.com/settings/tokens ここでtokenを発行してそれをPasswordとして使うとよい。

さぁこれで準備ができた。あとはpublishするだけ…と思いきや。
publishすると、

とでた。さぁ出来たかなと見てみると、ない。どこにもない。

ここにもないし、

ここにもない。(今はあるけど)

これは困った… と思って、よくよくGitHub公式のものを読み返すと、

プロジェクト内にあるローカルの .npmrc ファイルか、package.jsonpublishConfig オプションを使って、スコープのマッピングを設定できます。 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、

とかだすのおかしくないですか…? これもしかして自分のscopeなしpackageがどっかで公開されてたりするのかな…だとしたら怖いな…

次は重い重い重い腰をあげて(実に3年ごしの願いを実現するときが…)、いよいよずっとやりたかった、tagのpushで自動npm package publishをやります… npmjs.comとGitHub actionsだとなんか手動のほうが楽そうなくらい辛そうだったので…
幾分よくなることを祈ってます。

おわり

--

--