首页 > 解决方案 > 为什么我不能通过从 Npm 脚本运行 BASH 脚本来设置环境变量?

问题描述

我有一个 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 脚本,以便为命令提示符的其余部分保存环境变量会议。谢谢!

标签: bashnpmnpm-scripts

解决方案


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


推荐阅读