【问题标题】:How to get environment variable in npm script?如何在 npm 脚本中获取环境变量?
【发布时间】:2017-02-22 15:57:05
【问题描述】:

我正在尝试访问 npm 脚本本身中的环境变量,如下所示:

"scripts": {
  "test": "istanbul cover node_modules/.bin/_mocha --root ../SERVER/routes -- --recursive"
},

然后像这样启动这个脚本:

SERVER=somewhere npm test

如何在 package.json 本身的 npm 脚本中获取 SERVER 变量的解析值?

【问题讨论】:

  • 你为什么需要这个?
  • @havenchyk 因为我试图在 TeamCity 中自动化这个测试,所以我将 SERVER 作为环境变量从那里传递
  • package.json 只是一个 json 文件,您无法在其中获取它,但您可以使用 process.env 在脚本中获取此变量
  • @havenchyk 工作!那很快。谢谢 :) 我现在无法标记答案,在此之前,Bonus question: 设置环境变量名称是否有任何条件?像我可以将my-server 设置为环境变量吗?
  • 我也将其发布为答案 :) 至于奖金问题,对不起,我没明白 :)

标签: node.js npm package.json


【解决方案1】:

使用$SERVER 对你有用吗?

"scripts": { "test": "istanbul cover node_modules/.bin/_mocha --root ../$SERVER/routes -- --recursive" }

【讨论】:

  • 这不适用于跨平台(即在 Windooze 上)。
【解决方案2】:

最好使用env 并使用process.env 获取脚本中的值。这是一种广泛使用的做法。

package.json只是一个json文件,它甚至不允许cmets,所以我不建议使用这种方法。

【讨论】:

  • 在 npm 脚本中包含所有内容也是一种广泛使用的做法。这种方法是否真的是所有用例中的最佳解决方案,还有待商榷。然而,这不是最初的问题,因此建议使用不同的方法并不能真正解决问题。
【解决方案3】:

对于 windows 用户,您可以像这样使用变量:%SERVER% 而不是 $SERVER

或者更好的方法来使用cross-env module,这将允许你在所有平台上像 linux 一样做:

npm i cross-env

并使用它:

"scripts": {
  "test": "cross-env-shell \"istanbul cover node_modules/.bin/_mocha --root ../$SERVER/routes -- --recursive\""
}

【讨论】:

  • 很高兴接受的答案适用于 OP,但这应该是真正接受的答案
猜你喜欢
  • 1970-01-01
  • 2013-08-25
  • 2016-03-01
  • 2021-06-28
  • 1970-01-01
  • 2018-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多