コンテキスト
.npmrc
ファイルは正しく読み取られているようです(コマンドラインとMavenビルドの両方からnpm config ls -l
でチェックされています)。
npm
が実行されているマシンはネットに直接接続できません。NexusnpmレジストリURLにのみ接続できます。したがって、プロキシプロパティproxy
およびhttps-proxy
は設定されません。
Nexusへのアクセスが制限されているため、Nexus内からアクセストークンを生成しました。
Nexusセキュリティトークンは、通常「URLエンコード」する必要がある/
などの文字を含むユーザー名とパスワードから作成されます
予想どおり、この構成では、npm install
の実行時にプロキシが検出されません。
Nexus npmレジストリプロキシが正しく設定されているようです(生成されたトークンを使用して接続した後、Webブラウザを使用してjson
ファイルにアクセスし、tgz
ファイルをダウンロードできます)
registry
をhttp://registry.npmjs.org/
に設定し、_auth
、email
、always-auth
、strict-ssl
プロパティをコメントし、proxy
およびhttps-proxy
構成を追加すると、npm install
は期待どおりに動作します(ただし、_ターゲット環境で)
.npmrc
ファイルの内容
; Nexus proxy registry pointing to http://registry.npmjs.org/
registry = https://<Host>/nexus/content/repositories/npmjs-registry/
; base64 encoded authentication token
_auth = <see question below>
; required by Nexus
email = <valid email>
; force auth to be used for GET requests
always-auth = true
; we don't want to put certificates in .npmrc
strict-ssl = false
loglevel = silly
質問
_auth
が期待どおりに機能するようにするには、どのようにnpm install
プロパティを適切に生成する必要がありますか?
これまで試しました
<username>:<password>
)npm info retry will retry, error on last attempt: Error: socket hang up
になります<username>:<password>
))npm info retry will retry, error on last attempt: Error: This request requires auth credentials. Run `npm login` and repeat the request.
になります<username>
):
urlencode(<password>
))npm info retry will retry, error on last attempt: Error: socket hang up
になりますsocket hang up
エラーを取得すると、次のスタックトレースがあります。
http request GET https://<Host>/nexus/content/repositories/npmjs-registry/fsevents
sill fetchPackageMetaData Error: socket hang up
sill fetchPackageMetaData at TLSSocket.onHangUp (_tls_wrap.js:1035:19)
sill fetchPackageMetaData at TLSSocket.g (events.js:260:16)
sill fetchPackageMetaData at emitNone (events.js:72:20)
sill fetchPackageMetaData at TLSSocket.emit (events.js:166:7)
sill fetchPackageMetaData at endReadableNT (_stream_readable.js:905:12)
sill fetchPackageMetaData at doNTCallback2 (node.js:441:9)
sill fetchPackageMetaData at process._tickCallback (node.js:355:17)
sill fetchPackageMetaData error for fsevents@^1.0.0 { [Error: socket hang up] code: 'ECONNRESET' }
WARN install Couldn't install optional dependency: socket hang up
verb install Error: socket hang up
verb install at TLSSocket.onHangUp (_tls_wrap.js:1035:19)
verb install at TLSSocket.g (events.js:260:16)
verb install at emitNone (events.js:72:20)
verb install at TLSSocket.emit (events.js:166:7)
verb install at endReadableNT (_stream_readable.js:905:12)
verb install at doNTCallback2 (node.js:441:9)
verb install at process._tickCallback (node.js:355:17)
This request requires auth credentials
エラーを取得すると、次のスタックトレースがあります。
npm sill fetchPackageMetaData Error: This request requires auth credentials. Run `npm login` and repeat the request.
npm sill fetchPackageMetaData at CachingRegistryClient.authify (<root>\ui\target\node\node_modules\npm\node_modules\npm-registry-client\lib\authify.js:17:14)
npm sill fetchPackageMetaData at CachingRegistryClient.makeRequest (<root>\ui\target\node\node_modules\npm\node_modules\npm-registry-client\lib\request.js:103:17)
npm sill fetchPackageMetaData at <root>\ui\target\node\node_modules\npm\node_modules\npm-registry-client\lib\request.js:66:17
npm sill fetchPackageMetaData at RetryOperation._fn (<root>\ui\target\node\node_modules\npm\node_modules\npm-registry-client\lib\attempt.js:18:5)
npm sill fetchPackageMetaData at null._onTimeout (<root>\ui\target\node\node_modules\npm\node_modules\retry\lib\retry_operation.js:49:10)
npm sill fetchPackageMetaData at Timer.listOnTimeout (timers.js:92:15)
npm sill fetchPackageMetaData error for fsevents@^1.0.0 [Error: This request requires auth credentials. Run `npm login` and repeat the request.]
npm WARN install Couldn't install optional dependency: This request requires auth credentials. Run `npm login` and repeat the request.
npm verb install Error: This request requires auth credentials. Run `npm login` and repeat the request.
npm verb install at CachingRegistryClient.authify (<root>\ui\target\node\node_modules\npm\node_modules\npm-registry-client\lib\authify.js:17:14)
npm verb install at CachingRegistryClient.makeRequest (<root>\ui\target\node\node_modules\npm\node_modules\npm-registry-client\lib\request.js:103:17)
npm verb install at <root>\ui\target\node\node_modules\npm\node_modules\npm-registry-client\lib\request.js:66:17
npm verb install at RetryOperation._fn (<root>\ui\target\node\node_modules\npm\node_modules\npm-registry-client\lib\attempt.js:18:5)
npm verb install at null._onTimeout (<root>\ui\target\node\node_modules\npm\node_modules\retry\lib\retry_operation.js:49:10)
npm verb install at Timer.listOnTimeout (timers.js:92:15)
前もって感謝します。
registry-client
コードを見て、答えを見つけました。ここにあります。他の人に役立つかもしれないので投稿します:
base64Encode(<username>:<password>)
ところで、URLエンコードがありますが、それはauthify.js
が処理します。
私が直面している「ソケットがハングアップする」問題は、プロキシがWindows設定で設定されている場合、CLIから(およびMavenビルドからではなく)npm
を起動すると、すべての `` `.npmrc ``プロキシ設定は無視されるようですが、ネイティブプロキシの除外(企業URLの場合)はnpmによって無視されます。この奇妙な動作を報告するためにチケットを開きます。
https://books.sonatype.com/nexus-book/reference/npm-deploying-packages.html
$ echo -n 'username:password' | openssl base64
Nexusについては知りませんが、npmリポジトリとしてアーティファクトを使用し、base64encode(username:encryptedPassword)
を呼び出してencryptedPassword
を個人のアーティファクトから取得して認証トークンを作成できますプロフィール。
たぶんこれが役立ちます。
Before you run npm login, please follow the instructions below :
1) Create an ~/.npmrc file with the following contents:
registry=https://example.com/repository/npm-group/
[email protected]
always-auth=true
//example.com/repository/npm-group/:_authToken=
2) run `npm login`
# npm login
Username: firstname.lastname
Password:
Email: (this IS public) [email protected]
Logged in as firstname,lastname on https://example.com/repository/npm-group/.
Use the same password you use to login to example.com
システムのキーチェーンに資格情報を保存し、その場で提供するラッパーを作成しました。チェックアウト: https://github.com/Xiphe/npm_keychain_auth