web-dev-qa-db-ja.com

.npmrcのスコープ付きレジストリに_authを設定する方法は?

.npmrcファイルを構成して、デフォルトのレジストリと認証付きの別のスコープのレジストリを使用できるようにする方法を考えています。

プライベートリポジトリにNexusを使用していますが、スコープ付きレジストリに認証を設定する方法がわかりません。デフォルトのレジストリのみです。

たとえば、私の~/.npmrcファイルは次のとおりです。

registry=https://registry.npmjs.org/
@test-scope:registry=http://nexus:8081/nexus/content/repositories/npm-test/
[email protected]
_auth="…"

npm publishをスコープとするパッケージに対してtest-scopeを実行すると、認証エラーが発生します。

知る限り、_authregistry=...セクションにのみ適用されます。 @test-scope:registry=...セクションの認証キーを指定する方法はありますか?

おかげで、

17

そのため、NPMのソースコードを掘り下げた後、これを行う方法があることがわかりました。

私の解決策は次のとおりです:

registry=https://registry.npmjs.org/
@test-scope:registry=http://nexus:8081/nexus/content/repositories/npm-test/
//nexus:8081/nexus/content/repositories/npm-test/:username=admin
//nexus:8081/nexus/content/repositories/npm-test/:_password=YWRtaW4xMjM=
email=…

説明:

スコープ@test-scopeは、registry=コマンドの実行時に、デフォルトのnpm publishとは異なるレジストリにスコープを持つパッケージを発行することを指定します。

//nexus:8081/...で始まる2行は、username_passwordの両方のスコープ付きリポジトリに資格情報を指定するために使用されます。ここで、_passwordは、以前に使用された_auth資格情報。

このアプローチを使用すると、スコープ設定されたパッケージのみが公開され、プライベートレジストリからインストールされ、他のすべてのパッケージはデフォルトレジストリからインストールされます。

編集:

これに加えて、パスワードを環境変数として指定して、ファイルにプレーンテキストで保存されないようにすることができます。

例えば:

registry=https://registry.npmjs.org/
@test-scope:registry=http://nexus:8081/nexus/content/repositories/npm-test/
//nexus:8081/nexus/content/repositories/npm-test/:username=admin
//nexus:8081/nexus/content/repositories/npm-test/:_password=${BASE64_PASSWORD}
email=…

また、Nexusを使用する場合は、email=行を指定する必要があります。

18

何らかの奇妙な理由で、_auth_authTokenと呼ばれ、スコープ付きパッケージで使用されます。これを使用している場合、プレーンテキストパスワードを.npmrcに保存する必要はありません。

registry=https://registry.npmjs.org/
@test-scope:registry=http://nexus:8081/nexus/content/repositories/npm-test/ 
//nexus:8081/nexus/content/repositories/npm-test/:_authToken=...
email=…
8
c0l3