如何通过 env-cmd 使用环境文件

介绍

环境变量允许您在本地开发、测试、登台、用户验收测试 (UAT)、生产和作为项目工作流程一部分的任何其他环境之间切换。

不是将变量单独传递到脚本中,而是env-cmd让您将变量分组到环境文件 ( .env) 中并将它们传递到脚本。

在本文中,您将env-cmd在一个示例项目中安装和使用

先决条件

要完成本教程,您需要:

注意:本教程已更新为使用env-cmd9.0.0 版本之后的命令

本教程已通过 Node v15.14.0、npmv7.10.0 和env-cmdv10.0.1 验证。

步骤 1 – 设置项目

本教程假设您有一个新项目。创建一个新目录:

  • mkdir env-cmd-example

然后导航到目录:

  • cd env-cmd-example

将环境文件提交到版本控制系统通常被认为是一种不好的做法。如果存储库被分叉或共享,则其他人可以使用这些凭据,因为它们将永远记录在项目历史中。

建议将文件添加到您的.gitignore.

注意:这对于本教程的范围来说不是必需的,而是出于教育目的在此处提供。

初始化一个新git项目:

  • git init

创建一个.gitignore文件并添加模式以排除您的环境文件:

.gitignore
.env
.env.js
.env.json
.env-cmdrc

对于本教程,您可以排除.env.env.js.env.json.env-cmdrc

然后,.env为项目创建一个文件。

在代码编辑器中打开文件并添加以下代码行:

.env
creature=shark
green=#008f68
yellow=#fae042

这定义了creatureto sharkgreento #008f68yellowto #fae042

然后,创建一个新log.js文件:

日志文件
console.log('NODE_ENV:', process.env.NODE_ENV);
console.log('Creature:', process.env.creature);
console.log('Green:', process.env.green);
console.log('Yellow:', process.env.yellow);

这会将先前定义的变量记录到控制台。它还会打印出NODE_ENV值。

现在,您的示例已准备好将环境文件与env-cmd.

第 2 步 – 使用 env-cmd

现代npm并且yarn可以在env-cmd不使其成为依赖项的情况下运行

使用任一npx

  • npx env-cmd node log.js

或者yarn run

  • yarn run env-cmd node log.js

否则,您可以将软件包安装为依赖项或 devDependency:

  • npm install env-cmd@10.0.1

env-cmd软件包安装了一个名为的可执行脚本env-cmd,该脚本可以在您的脚本之前调用,以轻松地从外部文件加载环境变量。

根据您的设置,您可以env-cmd通过几种不同的方式进行引用

也许最兼容的包管理器是向您的package.json文件添加自定义脚本

包.json
{
  "scripts": {
    "print-log": "env-cmd node log.js"
  }
}

例如,使用npm,您将能够使用以下命令运行此自定义脚本:

  • npm run print-log

如果你更喜欢env-cmd直接从命令行使用,你可以直接从node_modules

  • ./node_modules/.bin/env-cmd node log.js

展望未来,本教程将使用该npx方法,但所有方法都旨在以类似方式工作。

现在,在您的终端中使用其中一种方法。

无论您选择如何运行脚本,env-cmd都将加载.env文件,并且日志记录脚本将报告变量。

Output
NODE_ENV: undefined Creature: shark Green: #008f68 Yellow: #fae042

您可能已经注意到该NODE_ENV值为undefined那是因为NODE_ENV没有在.env文件中定义

可以NODE_ENV在调用之前传入env-cmd

例如,这是以下命令npx

  • NODE_ENV=development npx env-cmd node log.js

使用NODE_ENV定义的再次运行命令

Output
NODE_ENV: development Creature: shark Green: #008f68 Yellow: #fae042

在这一点上,你已经学会了使用env-cmd.env文件。

步骤 3 – 使用不同的文件格式

env-cmd默认情况下需要.env项目根目录中文件。但是,您可以使用--file( -f) 选项更改文件类型和路径

无论您如何引用它,您都可以使用多种文件格式来存储环境变量。

JSON 文件

下面是一个.env.json文件示例

.env.json
{
  "creature": "shark",
  "green": "#008f68",
  "yellow": "#fae042"
}

这是使用此文件的示例env-cmd

  • NODE_ENV=development npx env-cmd --file .env.json node log.js

现在您已经学习了如何使用 JSON 环境文件。

JavaScript

下面是一个.env.js文件示例

.env.js
module.exports = {
  creature: 'shark',
  green: '#008f68',
  yellow: '#fae042'
};

这是使用此文件的示例env-cmd

  • NODE_ENV=development npx env-cmd --file .env.js node log.js

现在您已经学习了如何使用 JavaScript 环境文件。

RC文件

rc文件格式是特殊的,因为它可以让你在一个JSON文件中定义多个环境,并通过名称而不是文件中引用的环境。

“runco​​m”文件也很特殊,因为它必须被命名.env-cmdrc并存在于项目的根目录中。

下面是一个的例子.env-cmdrc文件与定义的环境developmentstagingproduction

.env-cmdrc
{
  "development": {
    "NODE_ENV": "development",
    "creature": "shark",
    "green": "#008f68",
    "yellow": "#fae042",
    "otherVar1": 1
  },
  "staging": {
    "NODE_ENV": "staging",
    "creature": "whale",
    "green": "#6db65b",
    "yellow": "#efbb35",
    "otherVar2": 2
  },
  "production": {
    "NODE_ENV": "production",
    "creature": "octopus",
    "green": "#4aae9b",
    "yellow": "#dfa612",
    "otherVar3": 3
  }
}

使用这些.env-cmdrc值需要一个--environments( -e) 选项。

然后您可以引用单个环境:

  • npx env-cmd --environments development node log.js

您甚至可以引用多个环境,这些环境会将每个环境变量合并在一起,如果存在重叠变量,则最后一个环境优先:

  • npx env-cmd --environments development,staging,production node log.js

通过指定我们的所有三个环境,otherVar将设置每个值,其余变量来自列出的最终环境,production

第 4 步 – 使用优雅回退 --fallback

在不存在自定义环境文件的情况下:

npx env-cmd -f .env.missing node log.js

env-cmd 会抛出错误:

Output
Error: Failed to find .env file at path: .env.missing

在自定义 env 文件路径出现意外问题的情况下,env-cmd可以尝试.env从项目的根目录加载文件。为此,请传入--fallback标志:

  • npx env-cmd --file .env.missing --fallback node log.js

现在,如果有一个有效的.env文件可以回退,这个命令将不会显示任何错误。

步骤 5 – 使用现有环境值 --no-override

在某些情况下,您可能希望保留已在环境中设置的全部或部分变量。

要尊重,而不是在你的使用值现有的环境变量.env文件,传递env-cmd--no-override标志:

  • NODE_ENV=development creature=squid npx env-cmd --no-override node log.js

这将导致以下输出:

Output
NODE_ENV: development Creature: squid Green: #008f68 Yellow: #fae042

请注意,该creature值已设置为squid代替文件shark中定义which .env

结论

在本文中,您安装并env-cmd在一个示例项目中使用。

使用环境文件可以帮助您在“开发”和“生产”环境之间切换。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁