Context
My .npmrc
file seems to be correctly read (checked with npm config ls -l
both from command line and from Maven build).
the machine on which npm
is run cannot connect directly to the net, it can only connect to a Nexus npm registry url. Therefore, proxy properties proxy
and https-proxy
are not set.
As access to Nexus is restricted, I have generated an access token from within Nexus.
Nexus security tokens are made from a username and a password which both contain characters such as /
which usually have to be "url encoded"
as expected, with this configuration, when running npm install
detects no proxy.
Nexus npm registry proxy seems to be correctly set (I can both access json
files and download tgz
files using a web browser after having connected using the token generated)
If I set registry
to http://registry.npmjs.org/
and comment _auth
, email
, always-auth
, strict-ssl
properties, and add proxy
and https-proxy
configuration, npm install
works as expected (but I won't be able to do it on target environment)
Content of .npmrc
file
; 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
Question
How should I generate the _auth
property properly in order to have npm install
work as expected?
I tried so far
<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
When getting the socket hang up
error I have the following stack trace:
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)
When getting the This request requires auth credentials
error I have the following stack trace:
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)
Thanks in advance.
_auth. access. all. allow-same-version. audit.
npmrc Files Per-project config file: /path/to/my/project/. npmrc. Per-user config file: ~/. npmrc.
npm is configured to use the npm public registry at https://registry.npmjs.org by default.
You can show the registry of a specific package with the npm view command. When you use npm config get registry you will see the default registry.
https://books.sonatype.com/nexus-book/reference/npm-deploying-packages.html
$ echo -n 'username:password' | openssl base64
If you have authorization token you should not use username:password. I suggest you:
Generate token
npm config list
npm login --registry=https://nexus.whatever.registry/respository/npm-whatever-group/
//nexus.whatever.registry/respository/npm-whatever-group/:_authToken=NpmToken.YOUR-LOVELY-TOKEN-IN-HEX
//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/
If you have problems with authentication/certs:
For CI/CD pipelines (like gitlabs or jenikins):
${RELEVANT_ENV_VARIABLES}
. This way you will make them less visible and always self-updating on change of pipline.Hope this help.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With