.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
を実行すると、認証エラーが発生します。
知る限り、_auth
はregistry=...
セクションにのみ適用されます。 @test-scope:registry=...
セクションの認証キーを指定する方法はありますか?
おかげで、
そのため、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=
行を指定する必要があります。
何らかの奇妙な理由で、_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=…