为什么不能通过Npm脚本运行BASH脚本来设置Env变量?

时间:2018-07-03 20:46:36

标签: bash npm npm-scripts

我有一个nodejs javascript项目,但是我想在本地设置一堆环境变量。创建了一个仅导出一些变量的bash文件:

#!/usr/bin/env bash

export waka=flaka
export fat=booty

当我使用点作为源代码并从命令行运行文件时,它工作正常:

. ./env.sh

我可以看到变量已设置

echo $waka  # prints "flaka"

但是然后我尝试通过将此命令添加到我的package.json中,使其成为npm脚本

scripts: {
  "set-env": ". ./env.sh",
  ...
 }

然后运行它:

npm run set-env

脚本已运行,但未保存环境变量:

echo $waka  # prints undefined (assuming you didn't already run it from command line)

所以,我想知道为什么它没有将环境变量另存为npm脚本,以及是否有可能以某种方式从npm脚本运行bash脚本,以便将环境变量保存为其余部分。命令提示符会话。谢谢!

1 个答案:

答案 0 :(得分:3)

npm不是shell命令;它运行在一个单独的进程中,该进程派生另一个外壳程序来运行set-env指定的命令。 env.sh被执行,但该外壳程序立即退出,此时更改已消失(然后npm本身退出)。