首页 > 解决方案 > 加载本地环境变量以在 NPM 脚本中使用

问题描述

我有一个如下所示的 NPM 脚本:

"start": "server start --host $DEV_HOST"

还有许多其他脚本也引用了$DEV_HOSTenv。

目前$DEV_HOST在 my 中导出~/.bashrc,但我想找到一种在项目本地定义它的方法,例如在.env文件中。

我想知道 npm 是否提供了一个preall钩子,它允许调用一个简单的 bash 文件,该文件可以加载到本地环境中,但不存在这样的钩子。

NPM 似乎也没有为本地环境提供任何开箱即用的加载机制。

我目前能想到的唯一解决方案是:

  1. 将所有需要本地 env 的脚本移动到它们自己的 bash 文件中,并在每个脚本中加载 .env 文件。

  2. 在需要从 .env 文件加载到环境中的本地环境的每个脚本之前调用一个单独的脚本。

这两种方法看起来都不必要地繁琐,并且不能很好地扩展。

有没有办法加载项目本地文件中定义的环境,以便它们可用于 NPM 脚本?

注意:我不是在问如何将环境加载到应用程序中。我在问如何使环境对 npm 脚本可用。这两件事完全不同。dot-env 将环境添加到当前进程。即使您创建了一个使用 dot-env 加载一些环境的节点脚本,这些环境也无法通过 $ 变量获得,因为它们没有加载到环境中。它们只能在同一进程中通过process.env.

标签: javascriptnpmenvironment-variablesenvironmentpackage.json

解决方案


你可以简单地在你的 NPM 脚本中回显一个环境变量。

例如,在项目根目录中的命令行上运行以下命令:

export SOME_ENV=blalala

然后在你的package.json你可以像这样使用它:

"scrips:" {
  "print-env": "echo $SOME_ENV"
}

这输出blalala到控制台。

如果您想.env在脚本中定义环境变量,请使用以下内容:https ://www.npmjs.com/package/better-npm-run

npm i better-npm-run

创建您的.env文件,然后完全如上所示使用变量


推荐阅读