NPM-无法替换配置中的环境:$ {NPM_TOKEN}

fd.*_*nov 17 node.js npm node-modules reactjs

我正在尝试构建一个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)
Run Code Online (Sandbox Code Playgroud)

我正在使用MacOS High Sierra。我尝试使用以下命令将NPM_TOKEN设置为环境变量:

set -x NPM_TOKEN = xyz
Run Code Online (Sandbox Code Playgroud)

但这不起作用。问题是什么?

MH *_*har 25

我有一个简单的解决方案来解决这个问题。在您将 NPM_TOKEN 全局设置到您的环境中后,然后替换

//registry.npmjs.org/:_authToken=${NPM_TOKEN}
Run Code Online (Sandbox Code Playgroud)

//registry.npmjs.org/:_authToken=$NPM_TOKEN
Run Code Online (Sandbox Code Playgroud)

它在 macOS Catalina 上对我来说效果很好。

  • 这确实修复了从命令行运行的问题(我也是 macOS Catalina),但它不适用于各种 CI (2认同)

小智 21

第一个可能的解决方案:

简单的解决方案:(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保存

  • 如果您从文件中删除这一行,那么您如何获得对私人存储库的访问权限? (9认同)
  • 我不明白这个解决方案的原因,如果有它就好了。 (6认同)
  • “是的,只需删除导致问题的文件或行即可” 很好的解决方案!/秒 (5认同)
  • 这不是解决方案,而是一种解决方法。正确的解决方案是删除此行并更新您的CI部署配置,例如`npm config set'//registry.npmjs.org/:_authToken'“ $ {NPM_TOKEN}” &amp;&amp; npm publish`。 (3认同)

Jez*_*zor 14

实际上是正确的解决方案

更新您的CI部署配置:

npm config set '//registry.npmjs.org/:_authToken' "${NPM_TOKEN}"
npm publish
Run Code Online (Sandbox Code Playgroud)

.npmrc文件中删除此行:

//registry.npmjs.org/:_authToken=${NPM_TOKEN}
Run Code Online (Sandbox Code Playgroud)

示例构建配置

您可以在我的一个GitHub存储库中看到该解决方案在实践中使用:https : //github.com/Jezorko/lambda-simulator/blob/master/.travis.yml

加密的环境变量是NPM令牌。

为什么其他“解决方案”仅仅是解决方法

我在这里和这个问题下都看到了答案,建议您简单地完全删除变量设置行或.npmrc文件。

事实是,.npmrcVCS系统可能不会忽略该文件,对其进行修改可能会导致意外将其推送到项目的存储库。此外,该文件可能包含其他重要设置。

这里的问题是.npmrc设置环境变量时不允许使用默认值。例如,如果允许使用以下语法,则该问题将不存在:

//registry.npmjs.org/:_authToken=${NPM_TOKEN:-undefined}

  • 执行 `npm config set '//registry.npmjs.org/:_authToken' "${NPM_TOKEN}"` 为我抛出了与标题完全相同的错误。仅使用已接受答案中的第一个解决方法解决。 (6认同)
  • @Jezor 很多开发人员都在多租户内部系统上工作,这些系统位于公司防火墙后面,但对内部用户的保护松散。您希望您的安全模型“处处松脆”,而不是“外硬内软”。 (4认同)
  • 这种方法会将“${NPM_TOKEN}”泄漏给机器上能够列出进程及其参数的任何用户,例如。与“ps”、“pgrep”等 (3认同)

dan*_*ang 13

如果你只是第一次设置你的 ~/.profile (OSX, Ubuntu) 并添加了这一行:export NPM_TOKEN="XXXXX-XXXXX-XXXXX-XXXXX"。然后你必须在终端输入这一行:

source ~/.profile
Run Code Online (Sandbox Code Playgroud)


Jor*_*son 7

npm install在 IDE(如 WebStorm)中运行是我的问题。我添加了 NPM_TOKEN 环境变量.bash_profile并重新启动了我的终端,但不是我的 IDE!直到我重新启动 IDE 后,IDE 才接收到对环境的更改。