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

新手上路,请多包涵

我正在尝试构建一个反应应用程序,但是当我执行命令 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

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

原文由 funtik 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

第一个可能的解决方案:

简单解决方案: rm -f ./.npmrc (删除.npmrc文件)

第二种可能的解决方案:

但是,如果您不想删除该文件,您可以简单地删除 .npmrc 文件中的这行代码。

代码行: //registry.npmjs.org/:_authToken=${NPM_TOKEN} (删除此代码)

第三种可能的解决方案

最坏的情况是:

  • nano ~/.bash_aliasesnano ~/.bash_profile
  • 添加 export NPM_TOKEN="XXXXX-XXXXX-XXXXX-XXXXX"
  • CTRL + X 退出
  • Y 保存

原文由 accimeesterlin 发布,翻译遵循 CC BY-SA 4.0 许可协议

实际上正确的解决方案

更新您的 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/5882a5d738060c027b830bcc2d58824c5d27942b/.github/workflows/deploy.yml#L26-L27

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

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

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

事实上, .npmrc 文件可能不会被您的 VCS 系统忽略,修改它可能会导致意外推送到您的项目存储库。此外,该文件可能包含其他重要设置。

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

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

原文由 Jezor 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题