为什么我不能通过 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
本身退出)。
我有一个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
本身退出)。