web-dev-qa-db-ja.com

NPMレジストリに公開できません(ローカル)

Nexus 3.0.1-01を実行しており、MavenリポジトリとNPMレジストリの両方をホストするために使用しています。 NPMには、npmjs.orgのローカルミラー、ローカルNPMレジストリ、および2つを組み合わせたグループがあります...

enter image description here

私はこれをnpmで内部的に使用しており、npm-publicグループをレジストリとして使用でき、これはうまく機能しています。したがって、Nexusを使用してnpmjsをミラーリングできます。

次のステップは、ローカルで作成されたnpmモジュールを取得し、npm-releases(Nexusインスタンス上)に公開して、これらのモジュールを配信チーム間で共有できるようにすることです。パッケージを構築することができましたが、npm packは動作しているようです。

Npm adduserを実行して、Nexus資格情報をnpm環境に提供しました。 Nexus Webアプリにログインするときに使用するのと同じユーザー名/パスワードを使用しており、ユーザーに管理者ロールが割り当てられています(したがって、すべての権限が必要です)。 .npmrcファイルで資格情報を確認できます

enter image description here

私のレジストリ値は、ミラーとローカルレジストリを組み合わせたnpm-publicgroupのままです。デプロイしようとしているモジュールのpackage.jsonに、ローカルグループのレジストリ(パブリックグループではない)のURLを指す「publishConfig」セクションがあることを確認しました。

enter image description here

しかし、それにもかかわらず、「npm publish」を呼び出すと401エラーが発生します...

enter image description here

Npm-debug.logを見ると、HTTP PUT呼び出しを呼び出して、アセンブルされたtgzファイルをレジストリにプッシュしようとしていることがわかります。これは401エラーを返しています。

enter image description here

サーバーのshiroパッケージでデバッグロギングを有効にしましたが、認証が必要だと思うメッセージが1つしか表示されません

2016-09-13 08:56:28,590+1000 DEBUG [qtp1257823896-4030] *UNKNOWN org.Apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter - Authentication required: sending 401 Authentication challenge response.

ドキュメントによると、私はするべきことをすべてやりました(npmユーザーを追加)が、npmモジュールをローカルリポジトリに正常にデプロイすることができません。

Npm publishを呼び出すときに使用する必要がある追加オプションはありますか?サーバーにホストされているnpmリポジトリに公開する必要がある追加の設定はありますか?デフォルト値を使用して作成しました。ホストされているnpmレジストリへのデプロイを妨げるステップを見逃していませんか?

私は現在立ち往生しているので、どんな助けも大歓迎です。

40
EdH

結局のところ、アクティブなレルムのリストにNpm Bearer Token Realmがありませんでした。アクティブに移動すると、公開が正常に完了しました!

enter image description here

93
EdH

さらに@EdHの回答に加えて、.npmrcの形式が変更されたため、base64でエンコードされた_authが機能しなくなることを発見しました...そして、リポジトリにログインしてトークンを作成する必要があります。

古い.npmrc

registry=https://Host/repo
_auth=12afdjsljl123213

新しい.npmrc

//Host/repo/:_authtoken=uuidOfToken
10

@Danielの答えに加えて、 ユーザー資格情報の追加/ npmへのログイン の場合、レジストリURLの末尾にスラッシュを付けることはできません。

悪い:

npm adduser --registry=https://repo.localhost/repository/npm-internal/

良い:

npm adduser --registry=https://repo/repository/npm-internal

また、ログインを自動化する場合(つまり、非対話型)、 npm-cli-login という優れたツールを使用しました。

npm-cli-login -u admin -p admin123 -e [email protected] -r https://repo/repository/npm-internal
4
Nick Grealy

私はこの投稿が数年前のものであることに気づきましたが、この問題に何時間も苦労していたので、他の多くの場所では見られなかったものがようやく見つかりました。問題は、_authTokenファイル内で.npmrcを指定していなかったことです。以下に示すようにこれを追加すると問題が解決し、401エラーなしでnpmコマンドを正常に実行できました。

.npmrc

registry=https://test.repo.com/repository/npm-group/
//test.repo.com/repository/npm-group/:_authToken=NpmToken.${NPM_TOKEN}
0
tripleplayj