为什么我不能通过 Npm 脚本中的 运行 A BASH 脚本设置 Env 变量?

Why Can't I Set Env Variables By Running A BASH Script From An Npm Script?

我有一个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)

所以,我想知道为什么它不将 envrionment 变量保存为 npm 脚本,以及是否有可能 运行 来自 npm 脚本的 bash 脚本以这样的方式环境变量将为命令提示符会话的其余部分保存。谢谢!

npm 不是 shell 命令;它 运行 在一个单独的进程中分叉 另一个 shell 以便 运行 set-env 指定的命令。 env.sh 被执行,但随后 shell 立即退出,此时更改消失(然后 npm 本身退出)。