I am trying to build a react app, but when I execute the command npm -i it gives me the following error:
Error: Failed to replace env in config: ${NPM_TOKEN} at /usr/local/lib/node_modules/npm/lib/config/core.js:415:13 at String.replace (<anonymous>) at envReplace (/usr/local/lib/node_modules/npm/lib/config/core.js:411:12) at parseField (/usr/local/lib/node_modules/npm/lib/config/core.js:389:7) at /usr/local/lib/node_modules/npm/lib/config/core.js:330:24 at Array.forEach (<anonymous>) at Conf.add (/usr/local/lib/node_modules/npm/lib/config/core.js:328:23) at ConfigChain.addString (/usr/local/lib/node_modules/npm/node_modules/config-chain/index.js:244:8) at Conf.<anonymous> (/usr/local/lib/node_modules/npm/lib/config/core.js:316:10) at /usr/local/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:78:16
/usr/local/lib/node_modules/npm/lib/npm.js:61 throw new Error('npm.load() required') ^
Error: npm.load() required at Object.get (/usr/local/lib/node_modules/npm/lib/npm.js:61:13) at process.errorHandler (/usr/local/lib/node_modules/npm/lib/utils/error-handler.js:205:18) at process.emit (events.js:182:13) at process._fatalException (internal/bootstrap/node.js:448:27)I am using MacOS High Sierra. I tried to set the NPM_TOKEN as an environment variable with following command:
set -x NPM_TOKEN = xyzbut it doesn't work. What is the problem?
420 Answers
Actually proper solution
Update your CI deployment configuration:
npm config set '// "${NPM_TOKEN}"
npm publishRemove this line from the .npmrc file:
//Example build config
You can see this solution used in practice in one of my GitHub repositories:
The encrypted environment variable is an NPM token.
Why the other "solutions" are mere workarounds
I've seen answers here and under this question that recommend simply removing the variable setting line or .npmrc file entirely.
Thing is, the .npmrc file might not be ignored by your VCS system and modifying it might lead to accidental pushes to your project's repository. Additionally, the file may contain other important settings.
The problem here is that .npmrc does not allow defaults when setting up environment variables. For example, if the following syntax was allowed, the issue would be non-existent:
//
First Possible Solution:
Simple Solution: rm -f ./.npmrc (Deleting a .npmrc file)
Second Possible Solution:
However if you don't want to delete the file, you can simply remove this line of code in the .npmrc file.
Line of Code: // (Remove this code)
Third Possible Solution
Worst case scenario:
nano ~/.bash_aliasesornano ~/.bash_profile- add
export NPM_TOKEN="XXXXX-XXXXX-XXXXX-XXXXX" - CTRL + X to exit
- Y to save
I have an easy solution to this issue. After you set your NPM_TOKEN globally into your environment then replace
//with
//It's worked well for me on macOS Catalina.
6If you just set your ~/.profile for the first time (OSX, Ubuntu) and added this line: export NPM_TOKEN="XXXXX-XXXXX-XXXXX-XXXXX". Then you must enter this line to the terminal afterward:
source ~/.profile 1 Running npm install in an IDE (like WebStorm) was my problem. I added the NPM_TOKEN environment variable to .bash_profile and restarted my Terminal, but not my IDE! The IDE did not pick up the changes to the environment until I restarted it as well.
The following worked for me. I had to place
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completionAFTER the line where i specify
export NPM_TOKEN='mytoken' Im my case moving the export of the token inside my .zsh (or .bash_profile) to the top of the file fixed the problem because it has been initialised too late before.
I fixed it by setting NPM_TOKEN=""
In github action, i set the env:
jobs: build: runs-on: ubuntu-latest env: NPM_TOKEN: "" # .... I fixed this via passing a docker build arg as
ARG NPM_TOKEN
ENV NPM_TOKEN=$NPM_TOKEN
ENV NPM_CONFIG_TOKEN=$NPM_TOKENMy scoped registry line with authToken wasn't being read properly inside my docker container. When running inside the container and invoking npm config list is didn't register.
So setting this variable : NPM_CONFIG_TOKEN and running npm config list registers it under a token key in the config.
replace
'//with
'// I got this issue while trying to setup a CI/CD job in Gitlab. I eventually found out that the error was caused because the variable that was throwing the error was set to a protected variable.
I changed it under Settings > CI / CD > Variables.
For people on Ubuntu coming from google:
- nano ~/.bash_aliases
- export NPM_TOKEN="PUT_YOUR_TOKEN_HERE"
- CTRL+X to exit
- Y to save
I am also getting this problem but I find a solution when I am pushing my repo on Heroku so I notice that Heroku run the command react-script start or build
//so this syntax didn't give the error but when I use the same syntax in my system and run the command it gives me. Because usually when we run in our system we use cmd npm or yarn but if you use react-script then it will not gives an error
On Windows while using git bash, setting a regular Windows environment variable worked for me. This answer helped setting an environment variable in Git Bash
In case of windows and visual studio code - just restart your visual studio, it helps.
Also, how to set this environment variable on windows?
open Registry Editor, and follow \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment, and create there another one "string value" with your token or whatever you need.
For mac
vim ~/.bash_profile
add export NPM_TOKEN=XXXXX-XXXXX-XXXXX-XXXXX
source ~/.bash_profile
also, add the below entry in the .zshrc file to apply the profile when a new terminal tab/window is opened.
if [ -f ~/.bash_profile ]; then . ~/.bash_profile
fi 1 Using AWS CODEARTIFACT
If you use docker, you need to add this to your Dockerfile
...
ARG CODEARTIFACT_AUTH_TOKEN
...
RUN export CODEARTIFACT_AUTH_TOKEN=$CODEARTIFACT_AUTH_TOKEN
RUN npm i
...This is the .npmrc file
registry=
//
//
registry=And the build command will be:
docker build --build-arg CODEARTIFACT_AUTH_TOKEN=xxxyyyzzz . --tag my-tag For anyone using npm-run-all running into this issue that:
- Doesn't want to remove or modify their
.npmrcfile (because the syntax is actually ok) - Doesn't want to add the variable in question into their shell profile
- Doesn't want to set the variable before every single script as
"build": "NPM_TOKEN=... ..."
I found that when using npm-run-all any scripts using run-p or run-s that use other scripts (either directly or indirectly) that use the form npm run <SCRIPT> will parse the .npmrc configuration file, which in turn will cause errors if variables are not set.
To fix this, all you need to do is convert any scripts that are used, directly or indirectly by scripts using run-s or run-p to use run-s
Let's take this as an example:
...
"scripts": { "dev": "run-s build*", "build:js": "...", "build:css": "...", "predev": "npm run clean", "clean": "rm -rf ./dist ./build"
}
...Although this script does not call predev directly, it will be run before dev and this will cause configuration to be read, throwing the error
Instead, change it as follows:
...
"scripts": { "dev": "run-s build*", "build:js": "...", "build:css": "...", "predev": "run-s clean", "clean": "rm -rf ./dist ./build"
}
...where predev now uses run-s instead of npm run
I had the same issue on Macbook pro. Actually the issue is with the naming. Previously i added my token to my env file as below
export GITHUB_TOKEN="xxxx-xxxx-xxxx"Solved
Solved by changing the name to
export GITHUB_ACCESS_TOKEN="xxxx-xxxx-xxxx"Conclution
When you define access tokens it is better to name it as **_ACCESS_TOKEN so the npm can identify it correctly.
you can also replace the ${NPM_TOKEN} with your own GitHub generated personal token