【问题标题】:How do I use value of env variable in npm script?如何在 npm 脚本中使用 env 变量的值?
【发布时间】:2016-02-29 21:32:47
【问题描述】:

我想在 npm 脚本中设置和使用环境变量。这样做的原因是我们的 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 时,将生成覆盖范围并放入名为 --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

【问题讨论】:

    标签: javascript node.js npm environment-variables


    【解决方案1】:

    AFAIK 无法使用类似 bash 的默认值,如 ${VAR:foo},只能使用简单的扩展 ${VAR}

    当一个变量没有定义时,它将被扩展为空字符串。这会大大降低变量的可用性,尤其是在需要不为空的隐式值的地方。

    【讨论】:

      【解决方案2】:

      NodeJS 中的环境变量读作如下:

      var value = process.env.VARIABLE;
      

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

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

      VARIABLE=test node app.js
      

      根据您运行测试的方式调整最后一个,但基本上环境变量的读取方式与我在第一个示例中显示的一样。

      【讨论】:

      • 此方法将允许设置可在 app.js 脚本中使用的变量。但我需要一种方法来获取命令本身中 env 变量的值。例如,如何在以下 npm 命令中获取 VARIABLE 的值:VARIABLE=test node ${VARIABLE}/app.js
      • 这不是 npm/node 命令。这是一个 shell 命令,它恰好启动了节点。可能是别的什么。通常你应该连接它们。在这里你应该说你的工作环境是什么?
      猜你喜欢
      • 2021-12-24
      • 1970-01-01
      • 2021-11-12
      • 2018-02-08
      • 2019-03-16
      • 1970-01-01
      • 2016-12-05
      • 1970-01-01
      • 2021-09-27
      相关资源
      最近更新 更多