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

介绍

环境变量允许您在本地开发、测试、阶段化、用户接受性测试(UAT)、生产和任何其他环境之间切换,这些环境是项目工作流的一部分。

而不是单独将变量传输到脚本中,env-cmd允许您将变量组合到环境文件中(.env)并将其传输到脚本中。

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

前提条件

要完成本教程,您将需要:

<$>[注] **注:**本教程已更新以使用版本 9.0.0 之后的 env-cmd 命令。

本教程已通过 Node v15.14.0、npm v7.10.0 和 env-cmd v10.0.1 进行验证。

步骤1 - 设置项目

此教程假设你有一个新的项目. 创建一个新的目录:

1mkdir env-cmd-example

然后导航到目录:

1cd env-cmd-example

将环境文件委托到版本控制系统通常被认为是错误的做法. 如果存储库被篡改或共享,其凭据将可用于其他人,因为它们将永远记录在项目历史中。

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

<$>[注] 注: 这不需要本教程的范围,但是为教育目的在这里呈现的。

启动一个新的git项目:

1git init

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

1[label .gitignore]
2.env
3.env.js
4.env.json
5.env-cmdrc

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

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

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

1[label .env]
2creature=shark
3green=#008f68
4yellow=#fae042

这将生物定义为鲨鱼,绿色定义为#008f68,黄色定义为#fae042

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

1[label log.js]
2console.log('NODE_ENV:', process.env.NODE_ENV);
3console.log('Creature:', process.env.creature);
4console.log('Green:', process.env.green);
5console.log('Yellow:', process.env.yellow);

这将将先前定义的变量登录到控制台,并打印出 NODE_ENV 值。

现在,您的示例已准备好使用env-cmd的环境文件。

步骤 2 – 使用env-cmd

现代npmyarn可以运行env-cmd,而不会使其成为依赖。

或者使用 npx:

1npx env-cmd node log.js

《Yarn Run》:

1yarn run env-cmd node log.js

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

1npm install [email protected]

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

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

也许在整个包管理器中最兼容的是将自定义脚本添加到您的 package.json 文件:

1[label package.json]
2{
3  "scripts": {
4    "print-log": "env-cmd node log.js"
5  }
6}

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

1npm run print-log

如果您更喜欢直接从命令行使用env-cmd,则可以直接从node_modules调用它:

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

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

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

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

1[secondary_label Output]
2NODE_ENV: undefined
3Creature: shark
4Green: #008f68
5Yellow: #fae042

您可能已经注意到 NODE_ENV 值为 未定义,这是因为 NODE_ENV.env 文件中没有定义。

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

例如,以下是「npx」的命令:

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

再次运行命令,定义为NODE_ENV:

1[secondary_label Output]
2NODE_ENV: development
3Creature: shark
4Green: #008f68
5Yellow: #fae042

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

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

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

无论您如何参考它,您都可以使用各种不同的文件格式来存储环境变量。

JSON 檔案

以下是.env.json 文件的例子:

1[label .env.json]
2{
3  "creature": "shark",
4  "green": "#008f68",
5  "yellow": "#fae042"
6}

以下是使用这个文件与env-cmd的例子:

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

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

加密货币

以下是.env.js 文件的例子:

1[label .env.js]
2module.exports = {
3  creature: 'shark',
4  green: '#008f68',
5  yellow: '#fae042'
6};

以下是使用这个文件与env-cmd的例子:

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

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

RC 檔案

rc文件格式是特殊的,因为它允许您在单个JSON文件中定义多个环境,并以名称而不是文件引用环境。

runcom文件也是特别的,因为它必须被命名为.env-cmdrc,并存在于项目的根部。

以下是一個「.env-cmdrc」檔案的例子,其環境定義為「開發」、「階段化」和「生產」:

 1[label .env-cmdrc]
 2{
 3  "development": {
 4    "NODE_ENV": "development",
 5    "creature": "shark",
 6    "green": "#008f68",
 7    "yellow": "#fae042",
 8    "otherVar1": 1
 9  },
10  "staging": {
11    "NODE_ENV": "staging",
12    "creature": "whale",
13    "green": "#6db65b",
14    "yellow": "#efbb35",
15    "otherVar2": 2
16  },
17  "production": {
18    "NODE_ENV": "production",
19    "creature": "octopus",
20    "green": "#4aae9b",
21    "yellow": "#dfa612",
22    "otherVar3": 3
23  }
24}

使用 .env-cmdrc 值将需要一个 --environments (`-e') 选项。

然后你可以参考一个单一的环境:

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

您甚至可以引用多个环境,这些环境中的每个变量将合并在一起,如果有重叠变量,最后一个环境将占优势:

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

通过指定我们三个环境,每个其他Var值将被设置,其余的变量将源自列出的最终环境生产

步骤 4 – 使用--fallback的礼貌倒退

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

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

将引发一个错误:

1[secondary_label Output]
2Error: Failed to find .env file at path: .env.missing

在与自定义 env 文件路径出现意外问题的情况下,‘env-cmd’可以尝试从项目的根部加载一个 `.env’ 文件。

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

现在,如果有一个有效的 .env 文件,该命令不会显示任何错误。

步骤5 – 使用现有环境价值与无过度

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

若要尊重现有的环境变量,而不是使用您的 .env 文件中的值,请通过 env-cmd--no-override 旗帜:

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

这将导致以下产出:

1[secondary_label Output]
2NODE_ENV: development
3Creature: squid
4Green: #008f68
5Yellow: #fae042

请注意,生物值已设置为squid,而不是鲨鱼,这是在.env 文件中定义的。

结论

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

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

Published At
Categories with 技术
Tagged with
comments powered by Disqus