NPM - 无法替换配置中的环境:${NPM_TOKEN}
NPM - Failed to replace env in config: ${NPM_TOKEN}
我正在尝试构建一个 React 应用程序,但是当我执行命令时 npm -i
它给了我以下错误:
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)
我正在使用 MacOS High Sierra。我尝试使用以下命令将 NPM_TOKEN 设置为环境变量:
set -x NPM_TOKEN = xyz
但它不起作用。
有什么问题?
Ubuntu 来自 google 的人:
- 纳米~/.bash_aliases
- 出口NPM_TOKEN="PUT_YOUR_TOKEN_HERE"
- CTRL+X 退出
- Y 保存
第一个可能的解决方案:
简单解决方案:rm -f ./.npmrc
(删除 .npmrc 文件)
第二种可能的解决方案:
不过,如果您不想删除该文件,只需删除 .npmrc
文件中的这行代码即可。
代码行://registry.npmjs.org/:_authToken=${NPM_TOKEN}
(删除此代码)
第三种可能的解决方案
最坏情况:
nano ~/.bash_aliases
或 nano ~/.bash_profile
- 添加
export NPM_TOKEN="XXXXX-XXXXX-XXXXX-XXXXX"
- CTRL + X 退出
- Y 保存
如果您是第一次设置 ~/.profile (OSX, Ubuntu) 并添加此行:export NPM_TOKEN="XXXXX-XXXXX-XXXXX-XXXXX"。
然后你必须在终端输入这一行:
source ~/.profile
真正正确的解决方案
更新您的 CI 部署配置:
npm config set '//registry.npmjs.org/:_authToken' "${NPM_TOKEN}"
npm publish
从 .npmrc
文件中删除这一行:
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
构建配置示例
您可以在我的 GitHub 存储库之一中看到实际使用的解决方案:https://github.com/Jezorko/lambda-simulator/blob/master/.travis.yml
加密的环境变量是一个 NPM 令牌。
为什么其他 "solutions" 只是解决方法
我在这里和 this question 下看到了建议完全删除变量设置行或 .npmrc
文件的答案。
问题是,.npmrc
文件可能不会被您的 VCS 系统忽略,修改它可能会导致意外推送到您的项目存储库。此外,该文件可能包含其他重要设置。
这里的问题是 .npmrc
在设置环境变量时不允许默认值。例如,如果允许以下语法,则问题将不存在:
//registry.npmjs.org/:_authToken=${NPM_TOKEN:-undefined}
我有一个解决这个问题的简单方法。在您将 NPM_TOKEN 全局设置到您的环境中之后,然后替换
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
和
//registry.npmjs.org/:_authToken=$NPM_TOKEN
我在 macOS Catalina 上运行良好。
运行 npm install
在 IDE(如 WebStorm)中是我的问题。我将 NPM_TOKEN 环境变量添加到 .bash_profile
并重新启动了我的终端,但不是我的 IDE! IDE 在我也重新启动它之前没有接受对环境的更改。
以下对我有用。我不得不放置
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_completion
在我指定的行之后
export NPM_TOKEN='mytoken'
我的情况是将 .zsh
(或 .bash_profile
) 中的令牌导出移动到文件顶部 解决了问题,因为它之前初始化太晚了。
在我的例子中,我只是将 export NPM_TOKEN 添加到 ~/.bashrc export NPM_TOKEN=60______-69__-44__-be__-2f__________
这是 bash Ubuntu 20.04
https://www.runoob.com/linux/linux-shell-variable.html
替换
'//registry.npmjs.org/:_authToken=${NPM_TOKEN}'
和
'//registry.npmjs.org/:_authToken='${NPM_TOKEN}
我也遇到了这个问题,但是当我在 Heroku 上推送我的 repo 时我找到了解决方案,所以我注意到 Heroku 运行 命令 react-script start 或 build
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
所以这个语法没有给出错误,但是当我在我的系统中使用相同的语法和 运行 它给我的命令时。
因为通常当我们 运行 在我们的系统中我们使用 cmd npm 或 yarn 但是如果你使用 react-script 那么它不会给出错误
我在 Gitlab 中尝试设置 CI/CD 作业时遇到了这个问题。我最终发现错误是因为抛出错误的变量被设置为受保护的变量。
我在设置 > CI / CD > 变量下更改了它。
在 Windows 上使用 git bash,设置常规 Windows 环境变量对我有用。这个答案帮助
如果 windows 和 visual studio code - 只是 restart 你的 visual studio,很有帮助。
此外,如何在 windows?
上设置此环境变量
打开注册表编辑器,然后按照 \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
,然后使用您的令牌或您需要的任何内容创建另一个“字符串值”。
对于mac
vim~/.bash_profile
添加export NPM_TOKEN=XXXXX-XXXXX-XXXXX-XXXXX
来源 ~/.bash_profile
此外,在 .zshrc 文件中添加以下条目以在打开新终端 tab/window 时应用配置文件。
if [ -f ~/.bash_profile ]; then
. ~/.bash_profile
fi
我通过设置 NPM_TOKEN=""
修复了它
在 github 操作中,我设置了 env:
jobs:
build:
runs-on: ubuntu-latest
env:
NPM_TOKEN: ""
# ....
使用 AWS CODEARTIFACT
如果您使用 docker,您需要将其添加到您的 Dockerfile
...
ARG CODEARTIFACT_AUTH_TOKEN
...
RUN export CODEARTIFACT_AUTH_TOKEN=$CODEARTIFACT_AUTH_TOKEN
RUN npm i
...
这是 .npmrc 文件
registry=https://sidanmor-codeartifact-main-112233.d.codeartifact.eu-west-1.amazonaws.com/npm/js-utils/
//https://sidanmor-codeartifact-main-112233.d.codeartifact.eu-west-1.amazonaws.com/npm/js-utils/:always-auth=true
//https://sidanmor-codeartifact-main-112233.d.codeartifact.eu-west-1.amazonaws.com/npm/js-utils/:_authToken=${CODEARTIFACT_AUTH_TOKEN}
registry=http://registry.npmjs.org
构建命令将是:
docker build --build-arg CODEARTIFACT_AUTH_TOKEN=xxxyyyzzz . --tag my-tag
您还可以将 ${NPM_TOKEN}
替换为您自己 GitHub 生成的个人令牌
我正在尝试构建一个 React 应用程序,但是当我执行命令时 npm -i
它给了我以下错误:
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)
我正在使用 MacOS High Sierra。我尝试使用以下命令将 NPM_TOKEN 设置为环境变量:
set -x NPM_TOKEN = xyz
但它不起作用。 有什么问题?
Ubuntu 来自 google 的人:
- 纳米~/.bash_aliases
- 出口NPM_TOKEN="PUT_YOUR_TOKEN_HERE"
- CTRL+X 退出
- Y 保存
第一个可能的解决方案:
简单解决方案:rm -f ./.npmrc
(删除 .npmrc 文件)
第二种可能的解决方案:
不过,如果您不想删除该文件,只需删除 .npmrc
文件中的这行代码即可。
代码行://registry.npmjs.org/:_authToken=${NPM_TOKEN}
(删除此代码)
第三种可能的解决方案
最坏情况:
nano ~/.bash_aliases
或nano ~/.bash_profile
- 添加
export NPM_TOKEN="XXXXX-XXXXX-XXXXX-XXXXX"
- CTRL + X 退出
- Y 保存
如果您是第一次设置 ~/.profile (OSX, Ubuntu) 并添加此行:export NPM_TOKEN="XXXXX-XXXXX-XXXXX-XXXXX"。 然后你必须在终端输入这一行:
source ~/.profile
真正正确的解决方案
更新您的 CI 部署配置:
npm config set '//registry.npmjs.org/:_authToken' "${NPM_TOKEN}"
npm publish
从 .npmrc
文件中删除这一行:
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
构建配置示例
您可以在我的 GitHub 存储库之一中看到实际使用的解决方案:https://github.com/Jezorko/lambda-simulator/blob/master/.travis.yml
加密的环境变量是一个 NPM 令牌。
为什么其他 "solutions" 只是解决方法
我在这里和 this question 下看到了建议完全删除变量设置行或 .npmrc
文件的答案。
问题是,.npmrc
文件可能不会被您的 VCS 系统忽略,修改它可能会导致意外推送到您的项目存储库。此外,该文件可能包含其他重要设置。
这里的问题是 .npmrc
在设置环境变量时不允许默认值。例如,如果允许以下语法,则问题将不存在:
//registry.npmjs.org/:_authToken=${NPM_TOKEN:-undefined}
我有一个解决这个问题的简单方法。在您将 NPM_TOKEN 全局设置到您的环境中之后,然后替换
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
和
//registry.npmjs.org/:_authToken=$NPM_TOKEN
我在 macOS Catalina 上运行良好。
运行 npm install
在 IDE(如 WebStorm)中是我的问题。我将 NPM_TOKEN 环境变量添加到 .bash_profile
并重新启动了我的终端,但不是我的 IDE! IDE 在我也重新启动它之前没有接受对环境的更改。
以下对我有用。我不得不放置
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_completion
在我指定的行之后
export NPM_TOKEN='mytoken'
我的情况是将 .zsh
(或 .bash_profile
) 中的令牌导出移动到文件顶部 解决了问题,因为它之前初始化太晚了。
在我的例子中,我只是将 export NPM_TOKEN 添加到 ~/.bashrc export NPM_TOKEN=60______-69__-44__-be__-2f__________ 这是 bash Ubuntu 20.04
https://www.runoob.com/linux/linux-shell-variable.html 替换
'//registry.npmjs.org/:_authToken=${NPM_TOKEN}'
和
'//registry.npmjs.org/:_authToken='${NPM_TOKEN}
我也遇到了这个问题,但是当我在 Heroku 上推送我的 repo 时我找到了解决方案,所以我注意到 Heroku 运行 命令 react-script start 或 build
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
所以这个语法没有给出错误,但是当我在我的系统中使用相同的语法和 运行 它给我的命令时。 因为通常当我们 运行 在我们的系统中我们使用 cmd npm 或 yarn 但是如果你使用 react-script 那么它不会给出错误
我在 Gitlab 中尝试设置 CI/CD 作业时遇到了这个问题。我最终发现错误是因为抛出错误的变量被设置为受保护的变量。
我在设置 > CI / CD > 变量下更改了它。
在 Windows 上使用 git bash,设置常规 Windows 环境变量对我有用。这个答案帮助
如果 windows 和 visual studio code - 只是 restart 你的 visual studio,很有帮助。
此外,如何在 windows?
上设置此环境变量打开注册表编辑器,然后按照 \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
,然后使用您的令牌或您需要的任何内容创建另一个“字符串值”。
对于mac
vim~/.bash_profile
添加export NPM_TOKEN=XXXXX-XXXXX-XXXXX-XXXXX
来源 ~/.bash_profile
此外,在 .zshrc 文件中添加以下条目以在打开新终端 tab/window 时应用配置文件。
if [ -f ~/.bash_profile ]; then
. ~/.bash_profile
fi
我通过设置 NPM_TOKEN=""
在 github 操作中,我设置了 env:
jobs:
build:
runs-on: ubuntu-latest
env:
NPM_TOKEN: ""
# ....
使用 AWS CODEARTIFACT
如果您使用 docker,您需要将其添加到您的 Dockerfile
...
ARG CODEARTIFACT_AUTH_TOKEN
...
RUN export CODEARTIFACT_AUTH_TOKEN=$CODEARTIFACT_AUTH_TOKEN
RUN npm i
...
这是 .npmrc 文件
registry=https://sidanmor-codeartifact-main-112233.d.codeartifact.eu-west-1.amazonaws.com/npm/js-utils/
//https://sidanmor-codeartifact-main-112233.d.codeartifact.eu-west-1.amazonaws.com/npm/js-utils/:always-auth=true
//https://sidanmor-codeartifact-main-112233.d.codeartifact.eu-west-1.amazonaws.com/npm/js-utils/:_authToken=${CODEARTIFACT_AUTH_TOKEN}
registry=http://registry.npmjs.org
构建命令将是:
docker build --build-arg CODEARTIFACT_AUTH_TOKEN=xxxyyyzzz . --tag my-tag
您还可以将 ${NPM_TOKEN}
替换为您自己 GitHub 生成的个人令牌