53

環境

  1. 私の.npmrcファイルは正しく読み取られているようです (npm config ls -lコマンドラインと Maven ビルドの両方からチェックされます)。

  2. が実行されているマシンnpmはネットに直接接続できず、Nexus npm レジストリ URL にしか接続できません。したがって、プロキシ プロパティproxyhttps-proxyは設定されません。

  3. Nexus へのアクセスが制限されているため、Nexus 内からアクセス トークンを生成しました。

  4. /Nexus セキュリティ トークンは、通常「URL エンコード」する必要がある文字を含むユーザー名とパスワードから作成されます。

  5. 予想どおり、この構成では、実行時にnpm installプロキシが検出されません。

  6. Nexus npm レジストリ プロキシが正しく設定されているようです (生成されたトークンを使用して接続した後、Web ブラウザーを使用してファイルにアクセスjsonしたり、ファイルをダウンロードしたりできます)tgz

  7. 、、、プロパティ、および追加と構成に設定registryhttp://registry.npmjs.org/てコメントすると、期待どおりに動作します (ただし、ターゲット環境では実行できません)。_authemailalways-authstrict-sslproxyhttps-proxynpm 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ますか?

ここまでやってみた

  1. base64Encode( <username>:<password>)
    • 結果はnpm info retry will retry, error on last attempt: Error: socket hang up
  2. base64Encode(urlencode( <username>:<password>))
    • 結果はnpm info retry will retry, error on last attempt: Error: This request requires auth credentials. Run `npm login` and repeat the request.
  3. base64Encode(urlencode( <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)

前もって感謝します。

4

6 に答える 6

13

認証トークンがある場合は、username:password を使用しないでください。私はあなたをお勧めします:

  1. トークンを生成

    • ~/.npmrc を削除するか、名前を変更してください。
    • $NPM_CONFIG_* などの環境設定が設定されていないことを確認してください。
    • 次を使用して、電子メールおよびその他の設定が設定されていないことを確認します。npm config list
    • 次を使用して npm にログインします。npm login --registry=https://nexus.whatever.registry/respository/npm-whatever-group/
    • ログに記録されると、ログに記録されます。npm は ~/.npmrc にトークンを生成する必要があります。次のようになります。

//nexus.whatever.registry/respository/npm-whatever-group/:_authToken=NpmToken.YOUR-LOVELY-TOKEN-IN-HEX

  1. そのトークンは、プロジェクト、CI パイプライン、およびその他のもので使用できます。プロジェクト .npmrc に次があることを確認してください。

//nexus.whatever.registry/respository/npm-whatever-group/:_authToken=NpmToken.YOUR-LOVELY-TOKEN-IN-HEX email = <EMAIL_USED_FOR_TOKEN_GENERATION> always-auth = true registry = https://nexus.whatever.registry/respository/npm-whatever-group/

  1. 認証/証明書に問題がある場合:

    • env 変数を (CI/CD パイプラインにも) $NODE_EXTRA_CA_CERTS を追加して、/home/wherever/is/your/cert.pem を指すようにします。
  2. CI/CD パイプライン (gitlabs や jenikins など) の場合:

    • .npmrc プロジェクト ファイルの実際の値を に置き換えることを検討してください${RELEVANT_ENV_VARIABLES}。このようにして、それらを目立たなくし、パイプラインの変更時に常に自己更新します。

この助けを願っています。

于 2019-09-27T09:32:20.710 に答える
7

コードを見た後、registry-client私は答えを見つけました。他の人に役立つかもしれないので投稿します:

base64Encode(<username>:<password>)

ところで、URL エンコーディングがありますが、それauthify.jsを処理するのはそれです。

私が直面している「ソケット ハングアップ」の問題は、プロキシが Windows 構成で設定されている場合、npm(Maven ビルドからではなく) CLI から起動すると、すべての ```.npmrc`` プロキシ設定がネイティブ プロキシの除外 (企業の URL 用) が npm によって無視される間、無視されます。この奇妙な動作を報告するためにチケットを開きます。

于 2016-01-27T18:01:52.630 に答える
2

Nexus についてはわかりませんが、artifactory を npm リポジトリとして使用しており、自分の個人的な artifactory プロファイルから取得したものを呼び出しbase64encode(username:encryptedPassword)て認証トークンを作成できます。encryptedPassword

たぶんこれが役立ちます。

于 2016-10-12T14:46:21.077 に答える