azu/can-npm-publish: A command line tool that check to see if npm publish is possible.というツールを書きました。

名前の通り指定したパッケージ(pacakge.json)を見て、そのパッケージのそのバージョンがnpm publish可能かどうかを判定してくれます。

npm publish可能かのチェックリスト

具体的には次のすべての条件を満たした時にpublishが可能と判断します。

たとえば、すでに同じバージョンがpublish済みの場合はexit statusが1を返します。

# in almin/
$ can-npm-publish --verbose
[email protected] is already published
$ echo $?
1

また、チェックにはnpm viewコマンドを使っていて、pacakge.jsonpublishConfigが設定されていればprivateのregistryでも動作します。

つかいみち

ものすごいシンプルな使い所だとnpm publishcan-npm-publish&&で実行するパターンです。

can-npm-publish && npm publish

もっと具体的にはlernaのようにまとめて、pacakges/*したのパッケージをpublishしたときに、lernaは一つでもpublishに失敗すると途中で止まってしまうので、can-npm-publishと組み合わせることで、publish可能なものだけをpublishできます。

lerna exec --bail=false -- "can-npm-publish && npm publish"

元々次のIssueのワークアラウンドとして作りました

Install

npmでインストールできます。

npm install can-npm-publish

Usage

Usage
  $ can-npm-publish [directory|pacakge.json path]

Options
  --verbose  show detail of errors

Examples
  $ can-npm-publish
  $ echo $? # 0 or 1

すべてのチェックが通った場合はexit statusが0になります。 何かがおかしい場合はexit statusが1となります。

何がおかしいのかの理由を知りたい場合--verboseオプションを利用できます。

$ can-npm-publish --verbose
[email protected] is already published
$ echo $?
1

リポジトリ