この辺り半年に一回やるかやらないかで都度ビクビクしながらpublishするので残しておくメモ。

今回publishコマンドを20回くらい叩いたのですが、TwoFactorAuthを設定しているとワンタイムパスワードを都度入力しないとダメですごくめんどくさかった。

試したこととか


–dry-run オプション

公開しないということ以外はpublishと同じで、どういう処理が行われるか標準出力されるやつ。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ npm publish --dry-run

npm notice
npm notice package: @yoshinorin/npm-publish-sandbox@0.0.1
npm notice === Tarball Contents ===
npm notice 138B src/index.js
npm notice 567B package.json
npm notice === Tarball Details ===
npm notice name: @yoshinorin/npm-publish-sandbox
npm notice version: 0.0.1
npm notice package size: 484 B
npm notice unpacked size: 705 B
npm notice shasum: bb905ba2dfe661a68271d1261d24df014eee0f0c
npm notice integrity: sha512-VzSXN7gaE/q9I[...]kqYiE7ucqiVUQ==
npm notice total files: 2
npm notice
+ @yoshinorin/npm-publish-sandbox@0.0.1

publish (初回)

初回は--access=publicオプションを付与しないと402で怒られる。

Getting Error 402 while publishing package using npm

1
2
3
4
5
6
7
8
9
10
11
12
$ npm publish

npm notice
npm notice package: @yoshinorin/npm-publish-sandbox@0.0.1
...
npm notice total files: 2
npm notice
This operation requires a one-time password.
Enter OTP: xxxxxx
npm ERR! code E402
npm ERR! 402 Payment Required - PUT https://registry.npmjs.org/@yoshinorin%2fnpm-publish-sandbox
- You must sign up for private packages

--access=publicを付与すると公開できる。

1
2
3
4
5
6
7
$ npm publish --access=public

npm notice
npm notice package: @yoshinorin/npm-publish-sandbox@0.0.1
...
Enter OTP: xxxxxx
+ @yoshinorin/npm-publish-sandbox@0.0.1

同じバージョンで公開してみる

0.0.1で公開した後に再度0.0.1のままpublishしてみる。もちろん怒られる。

1
2
3
4
5
6
7
8
9
10
11
12
13
$ npm publish

npm notice
...
npm notice total files: 2
npm notice
This operation requires a one-time password.
Enter OTP: xxxxxx
npm ERR! code E403
npm ERR! 403 403 Forbidden - PUT https://registry.npmjs.org/@yoshinorin%2fnpm-publish-sandbox
- You cannot publish over the previously published versions: 0.0.1.
npm ERR! 403 In most cases, you or one of your dependencies are requesting
npm ERR! 403 a package version that is forbidden by your security policy.

unpublishしてみる

先ほど0.0.1publishしたので、それを一度取り消してみる。

1
2
3
4
5
$ npm unpublish @yoshinorin/npm-publish-sandbox@0.0.1

This operation requires a one-time password.
Enter OTP: xxxxxx
- @yoshinorin/npm-publish-sandbox@0.0.1

なお、取り消しは 72時間以内 でないとダメ。

npm-unpublish
With the default registry (registry.npmjs.org), unpublish is only allowed with versions published in the last 72 hours.

もっかいpublishしてみる

0.0.1unpublishしたならもう一回0.0.1publishできるのでは??と思ってやってみた。ムリ。

1
2
3
4
5
6
7
8
9
10
11
12
13
$ npm publish --access=public

npm notice
npm notice package: @yoshinorin/npm-publish-sandbox@0.0.1
...
npm notice
This operation requires a one-time password.
Enter OTP: xxxxxx
npm ERR! code E400
npm ERR! 400 Bad Request - PUT https://registry.npmjs.org/@yoshinorin%2fnpm-publish-sandbox
- Cannot publish over previously published version "0.0.1".

npm ERR! A complete log of this run can be found in:

forceでpublishしてみる

0.0.1unpublishした状態で-fオプションをつけたら、もう一回0.0.1publishできるのでは??と思ってやってみた。ムリ。

1
2
3
4
5
6
7
8
9
10
$ npm publish -f

npm WARN using --force I sure hope you know what you are doing.
...
npm notice
This operation requires a one-time password.
Enter OTP: xxxxxx
npm ERR! code E400
npm ERR! 400 Bad Request - PUT https://registry.npmjs.org/@yoshinorin%2fnpm-publish-sandbox
- Cannot publish over previously published version "0.0.1".

バージョンを上げる

結局、初版(今回の場合は0.0.1)だとどうやってももう一回0.0.1で公開するのはムリっぽい。(別途書いたけど、1.0.0を公開している状態で0.1.0を公開するとかはできる)

ので、バージョンを上げて公開する。初版(今回の場合は0.0.1)をunpublishした場合は次の公開時にもう一回--access=publicを付与してあげないといけなかった。

1
2
3
4
5
6
7
8
9
10
$ npm publish --access=public

npm notice
npm notice package: @yoshinorin/npm-publish-sandbox@0.0.2
...
npm notice total files: 2
npm notice
This operation requires a one-time password.
Enter OTP: xxxxxx
+ @yoshinorin/npm-publish-sandbox@0.0.2

おわりんこ。