我想在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变量的值。
编辑:
为了说清楚,我想知道如何在以下情况下替换正确的变量值:
VAR=build node ${VAR}/app.js
SOMEVAR=build
node ${SOMEVAR}/app.js
答案 0 :(得分:-2)
NodeJS中的环境变量如下所示:
var value = process.env.VARIABLE;
process
是内部变量,VARIABLE
是您正在寻找的实际变量。
然后,您可以将这些变量传递给节点(启动服务器时):
VARIABLE=test node app.js
调整最后一个,取决于你如何运行测试和东西,但基本上环境变量的读取就像我在第一个例子中所示。