如何在 package.json 中使用 $npm_config_?

Posted

技术标签:

【中文标题】如何在 package.json 中使用 $npm_config_?【英文标题】:How to use $npm_config_ in package.json? 【发布时间】:2018-03-14 10:07:24 【问题描述】:

我在我的 React 项目(已退出)中使用 create-react-app,并且我在 package.json 中配置了一个代理。但我不想在此文件中提交我的凭据。所以我使用npm config set my_user xxxx 添加到 npm。 我也可以在我的 ~/.npmrc 中看到它们。

"proxy": 
  "/api/v3/": 
    "target": "https://ourstagingserver.nl/",
    "changeOrigin": true,
    "ssl": false,
    "secure": false,
    "headers": 
      "username": "$npm_config_my_user",
      "password": "$npm_config_my_pass"
    
  ,

这不起作用。代理请求中不使用用户名和密码。

但如果我将它添加到“脚本”中:

"hello": "echo $npm_config_my_user $npm_config_my_pass

并运行npm run hello,两者都回显...

有什么想法吗?这应该有效还是我做错了?

谢谢!吉斯

【问题讨论】:

【参考方案1】:

我没有弄清楚为此目的使用 $npm_config_ 变量,但我确实解决了在 create-react-app 中为代理使用 ENV 变量的问题:

scripts/start.js(第 62 行,const proxySetting = require(paths.appPackageJson).proxy 下方)中添加:

proxySetting[Object.keys(proxySetting)[0]].headers.username = process.env.PROXY_USERNAME;
proxySetting[Object.keys(proxySetting)[0]].headers.password = process.env.PROXY_PASSWORD;

或者,如果您有多个要代理的 API,您可以遍历 proxySetting 中的对象并为其中的每个对象设置凭据:

Object.keys(proxySetting).forEach(function(proxy) 
  proxySetting[proxy].headers.username = process.env.PROXY_USERNAME;
  proxySetting[proxy].headers.password = process.env.PROXY_PASSWORD;
);

注意:scripts/start.js 是由 create-react-app 生成的文件

【讨论】:

以上是关于如何在 package.json 中使用 $npm_config_?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows 的 package.json 中的 NPM 脚本中关闭终端?

如何卸载 package.json (NPM) 中列出的所有依赖项?

NPM - 如何在不更新或添加 package.json 中描述的包的情况下安装新包

NPM - package.json#engines |如何指定 Python?

与 npm 和 yarn 一起使用的 package.json 脚本?

如何在 package.json 中拥有来自不同注册表的 npm 依赖项?