如何在npm脚本中使用env变量的值?

时间:2015-11-26 17:48:05

标签: javascript node.js npm environment-variables

我想在npm脚本中设置和使用env变量。这样做的原因是我们的npm包将构建在CI管道中,并且CI机器具有用于工件/覆盖/测试路径的预定义env变量。在开发人员的本地计算机中,这些路径不存在,因此需要默认值。

"scripts": {
    "test": "COVERAGE_PATH=${COVERAGE_PATH:-./build/coverage} istanbul cover --dir ${COVERAGE_PATH} --include-all-sources tape -- tests/*.js",
    "build": "ARTIFACTS_PATH=${ARTIFACTS_PATH:-./build/} browserify -r ./index.js > ${ARTIFACTS_PATH}/bundle.js",
}

在本地计算机上(此处未定义$ COVERAGE_PATH,因此将使用回退值),当我运行npm run test时,将生成coverage并将其放入名为--include-all-sources的目录中。基本上当npm运行脚本命令时,它会忽略${COVERAGE_PATH}的值。我尝试在npm脚本中将其更改为`echo $COVERAGE_PATH`,但结果仍然相同。

我甚至在运行npm run script命令之前尝试在shell中定义变量,但脚本中的任何${VAR}仍然没有被替换。如何在npm脚本中正确替换env变量的值。

编辑:
为了说清楚,我想知道如何在以下情况下替换正确的变量值:

  1. VAR=build node ${VAR}/app.js
  2. SOMEVAR=build node ${SOMEVAR}/app.js

1 个答案:

答案 0 :(得分:-2)

NodeJS中的环境变量如下所示:

var value = process.env.VARIABLE;

process是内部变量,VARIABLE是您正在寻找的实际变量。

然后,您可以将这些变量传递给节点(启动服务器时):

VARIABLE=test node app.js

调整最后一个,取决于你如何运行测试和东西,但基本上环境变量的读取就像我在第一个例子中所示。