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

Jim*_*Jim 2 bash npm npm-scripts

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

#!/usr/bin/env bash

export waka=flaka
export fat=booty
Run Code Online (Sandbox Code Playgroud)

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

. ./env.sh
Run Code Online (Sandbox Code Playgroud)

我可以看到变量已设置

echo $waka  # prints "flaka"
Run Code Online (Sandbox Code Playgroud)

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

scripts: {
  "set-env": ". ./env.sh",
  ...
 }
Run Code Online (Sandbox Code Playgroud)

然后运行它:

npm run set-env
Run Code Online (Sandbox Code Playgroud)

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

echo $waka  # prints undefined (assuming you didn't already run it from command line)
Run Code Online (Sandbox Code Playgroud)

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

che*_*ner 5

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

  • 是; 这是一个基本概念,即流程的环境不能被其子流程之一修改。 (2认同)