npm 11.15.0

543文字
3分
編集

npm 11.15.0 で staged publishing が追加され、npm stage publish でパッケージをステージング領域へ提出し、メンテナが 2FA を伴う承認操作を行うまでレジストリ上で公開しない運用ができるようになった。CI からの自動 publish に「人の介入(proof-of-presence)」を挟みたい場合に使う。

前提として、npm CLI 11.15.0 以降と Node 22.14.0 以降が必要で、対象パッケージは npm レジストリ上に既に存在している必要がある。承認・却下に 2FA が必要になる。

sh
# 提出(ステージング)。2FA は要求されない
npm stage publish
  • ステージングした版は semver の一意性を消費するため、同じ name@version を「ステージング済み」の状態で重ねて提出できない
  • 通常の npm publish は、ステージングが残っていても並行して実行できる
  • package.json"private": true がある場合は npm publish と同様に拒否される

#確認と検査(list / view / download)

ステージング済みの版は CLI から一覧・詳細表示・tarball のダウンロードができる。

sh
# 一覧
npm stage list

# 詳細(stage-id を指定)
npm stage view <stage-id>

# tarball を取得してローカルで検査
npm stage download <stage-id>

#公開または破棄(approve / reject)

承認(公開)と却下(破棄)は 2FA が必須で、CLI でも npmjs.com でも実行できる。

sh
# 承認してレジストリへ公開(2FA が必要)
npm stage approve <stage-id>

# 却下してステージング領域から削除(2FA が必要)
npm stage reject <stage-id>

#tag とトークンの挙動

--tagnpm publish と同じ扱いで、指定がなければ既定は latest になる。プレリリース版や latest 以外の semver を出す場合は --tag の指定が必須で、ステージング後に tag を変更できない(別 tag にしたい場合は reject してから再提出が必要になる)。

また、ステージングの要点は npm stage publish がトークン種別に関わらず 2FA を要求しない点にあり、2FA を要求する操作を approve / reject 側に寄せられる。信頼関係(trusted publishing)の権限でも、npm stage publish の許可・不許可を分けて設定できる。

#参考文献