skwny
skwny

Reputation: 3140

How to set env var for .npmrc use

I need a module in my project to download a private npm package. To accomplish this, I am using a .npmrc file to supply a read-only token needed to download the package. To keep the token supplied by npm out of the file, I wish to add it as an environment variable and let it expand in the file. E.g:

# .npmrc
//registry.npmjs.org/:_authToken=${NPM_TOKEN}

I can't figure out how to get that NPM_TOKEN added to the env before it is referenced for the install. I tried using an npm preinstall script:

"preinstall": "NPM_READ_ONLY_TOKEN=my_token_goes_here_foo_bar"**

But I still get the same error:

Error: Failed to replace env in config: ${NPM_READ_ONLY_TOKEN}

I tried testing with an echo command to see if preinstall runs before the .npmrc variable expansion, but it apparently does not. I would get the error and not see my echo log. I seem to be missing something here.

I'm aware that putting my token in package.json defeats the purpose of pulling the token out of the .npmrc file. I'm actually using a service that provides env config services that I would use to run a command and get the needed token. E.g. TOKEN=config_service_value.

Upvotes: 76

Views: 95969

Answers (4)

jonathanhculver
jonathanhculver

Reputation: 790

You can add the environment variable to your .bashrc or other startup shell file.

export NPM_TOKEN=my_token_goes_here_foo_bar

Upvotes: 56

Bogdan
Bogdan

Reputation: 89

The easy and working way:

  1. You create '.npmrc.example' file, put there the registry address and commit this file to repo.
  2. locally you manually copy the '.npmrc.example' file, rename it to just regular '.npmrc' and add your token to that file. Regular .npmrc MUST NOT be commited to the repo.

Upvotes: 5

samuellawrentz
samuellawrentz

Reputation: 1732

If you are using zsh for your terminal. You should put the environment variable in the .zshenv file.

echo "export NPM_TOKEN=token_goes_here" >> ~/.zshenv

Then you have to restart your terminal and then try echo $NPM_TOKEN, you should be seeing the value of the environment variable.

Or send to .bashrc if you use bash.

Upvotes: 8

Anindya Dey
Anindya Dey

Reputation: 1071

Here is how one would set an environment variable in Powershell (Windows 10):

$env:ENV_VARIABLE = 'Value of my environment variable'

And here is the reference link for further study

Upvotes: 8

Related Questions