I am wondering how to configure the .npmrc
file so that I can have a default registry and a different scoped registry with authentication.
I am using Nexus for the private repository and I am not sure how to set authentication for the scoped registry, only the default registry.
For example my ~/.npmrc
file is:
registry=https://registry.npmjs.org/
@test-scope:registry=http://nexus:8081/nexus/content/repositories/npm-test/
email=test@user.com
_auth="…"
If I do npm publish
for a package scoped to test-scope
, I get an authentication error.
AFAIK, the _auth
only applies to the registry=...
section. Is there a way of specifying an auth key for the @test-scope:registry=...
section?
Thanks,
for some strange reason the
_auth
is called_authToken
when used with scoped packages. If you are using this you don't have to store your plain text password in your.npmrc
So, after some digging through the NPM source code, it turns out there is a way to do this.
My solution is below:
Explanation:
The scope
@test-scope
specifies that packages with the scope should be published to a different registry than the defaultregistry=
when executing thenpm publish
command.The two lines starting with
//nexus:8081/...
are used to specify the credentials to the scoped repository for bothusername
and_password
where_password
is the base64 encoded password component from the previously used_auth
credentials.Using this approach, only scoped packages will be published and installed from the private registry and all other packages will be installed from the default registry.
Edit:
Additional to this, the password can be specified as an environment variable so that it is not stored in plaintext in the file.
For example:
Also, when using Nexus, the
email=
line must be specified.