如何使用Node 环境变量

400 阅读3分钟

「这是我参与2022首次更文挑战的第19天,活动详情查看:2022首次更文挑战」。

环境变量是 Node 开发的基本组成部分,但出于某种原因,我从来没有费心学习如何正确使用它们。

在终端中使用

你可以在终端上传递环境变量作为 Node 进程的一部分。例如,如果你正在运行一个 Express 应用程序并想传入端口,你可以这样做......

PORT=65534 node bin/www

有趣的事实:端口 65535 是可用的最大 TCP/IP 网络值。参考 StackOverflow。对于网络应用程序,你只能使用截止到 65534 的端口,因为这是 Chrome 将连接到的最高端口。

在代码中使用变量,你可以用process.env对象。

var port = process.env.PORT;

如果你有一个连接字符串,你可能不想开始在终端上传递多个变量。

PORT=65534
DB_CONN="mongodb://react-cosmos-db:swQOhAsVjfHx3Q9VXh29T9U8xQNVGQ78lEQaL6yMNq3rOSA1WhUXHTOcmDf38Q8rg14NHtQLcUuMA==@react-cosmos-db.documents.azure.com:10255/?ssl=true&replicaSet=globaldb"
SECRET_KEY="b6264fca-8adf-457f-a94f-5a4b0d1ca2b9"

这些代码看起来有些难以维护。

所以让我们看看另一种方式:.env 文件。

使用 .env 文件

.env 文件允许你将环境变量放入文件中。你只需在项目中创建一个名为的新文件.env,然后将变量放在不同的行上。

PORT=65534

DB_CONN="mongodb://react-cosmos-db:swQOhAsVjfHx3Q9VXh29T9U8xQNVGQ78lEQaL6yMNq3rOSA1WhUXHTOcmDf38Q8rg14NHtQLcUuMA==@react-cosmos-db.documents.azure.com:10255/?ssl=true&replicaSet=globaldb"

SECRET_KEY="b6264fca-8adf-457f-a94f-5a4b0d1ca2b9"

要读取这些值,有几个选项,但最简单的是使用dotenvnpm 中的包。

npm install dotenv --save

然后,你只需在项目中需要使用环境变量的任何地方都需要该包。该dotenv包将获取该文件并将这些设置加载到 Node.js 中。

Use dotenv to read .env vars into Node
require('dotenv').config();
var MongoClient = require('mongodb').MongoClient;

// Reference .env vars off of the process.env object
MongoClient.connect(process.env.DB_CONN, function(err, db) {
  if(!err) {
    console.log("We are connected");
  }
});

在 VS Code 中使用 .env 文件

首先,您可以为代码安装 DotENV 扩展,这将在您的 .env 文件中为您提供很好的语法突出显示。

DotENV - Visual
Studio 代码的 Visual Studio 市场扩展 - 支持 dotenv 文件语法
marketplace.visualstudio.com

5TqqPI4CyihReGrXCaFqLDEAADqD-AJtHS4Y

如果你使用的是 VS Code Debugger ,VS Code Debugger 还提供了一些更方便的选项,用于从 .env 文件加载值。

VS Code 启动配置

VS Code 的 Node 调试器(已经存在,无需安装任何东西)支持通过启动配置加载 .env 文件。您可以在此处阅读有关启动配置的更多信息。

f6NKkdg6vZOubtIzh4k4EGEVUWtvC7ZC88SK

创建基本节点启动配置时(单击齿轮并选择节点),你可以执行一项或两项操作。

首先是你可以简单地在启动配置中传递变量。

OKoRgCmVBQJG3p2ZQ9em6NaMIYwNauEwp6Wd

这很好,但是每个值都必须是字符串这一事实让我有点困扰。它是一个数字,而不是一个字符串。JavaScript 只有 3 种类型。不要把其中一个从我身边带走。

这里有一个更简单的方法。我们已经学会了喜欢.env文件,所以我们可以给 VS Code 指定 .env 文件的名称,而不是传递它们。

5mkXYjMBORiWKSTBZzCcZTK33ubGUTFy7SuZ

只要我们从 VS Code 开始我们的流程,就会加载环境变量文件。我们不必将数字分解为字符串,也不会将毫无价值的代码部署到生产环境中。好吧,至少你不是。

从 NPM 而不是 Node 开始

可以使用 VS Code Launch 配置。你无需使用标准的节点启动流程,而是添加一个“通过 NPM start”任务的配置。

7tUmGEN-i6T30kHkzfXYj5qzAK8rB6qMTZir

现在你可以添加回你的envFile行并调整它们,runtimeArgs以便他们启动正确的脚本。这通常类似于“开始”或“调试”。

bkDqIcWImMhXbMrGry73ABhvBWCG2x5Sy92k

请注意,您必须将--inspect标志添加到您的 npm 脚本中,以便 VS Code 可以附加调试器

tGcPy6sdBlu9sR1OD07VdHD9MuSgj9-uDb7K

结论

希望你可以从中能够了解关于.env文件的知识!