Node.js env 环境变量多种配置方式

news/2024/10/7 14:08:00/

 

目录

process.env

配置方式

dotenv 使用

cross-env


process.env

在 Node.js 中,你可以使用 process.env 对象来读取环境变量。这个对象包含了所有的环境变量,你可以通过变量名来访问这些变量的值。

例如,如果你有一个名为 MY_VARIABLE 的环境变量,你可以这样读取它的值:

const myVariable = process.env.MY_VARIABLE;
console.log(myVariable);

这将打印出 MY_VARIABLE 环境变量的值。

注意,环境变量的名称是大小写敏感的,所以在访问环境变量时,你需要确保变量名的大小写与环境变量的大小写完全一致。

配置方式

process.env 中的环境变量来自于操作系统的环境变量。在 Node.js 中,你可以通过 process.env 对象来访问这些环境变量。这些环境变量通常是在启动 Node.js 进程时设置的,可以通过以下方式设置:

  1. 在操作系统级别设置

    • 在 Unix/Linux 系统中,可以在 shell 中使用 export 命令来设置环境变量。例如:

      export MY_VARIABLE=value
    • 在 Windows 系统中,可以通过控制面板或者命令行来设置环境变量。例如:

      set MY_VARIABLE=value
  2. 在应用程序启动时设置

    • 在 Node.js 应用程序中,可以在启动时通过命令行参数或者脚本文件来设置环境变量。例如:

      MY_VARIABLE=value node app.js

      或者在 package.json 文件中设置:

      {"scripts": {"start": "MY_VARIABLE=value node app.js"}
      }
  3. 在应用程序代码中设置

    • 在 Node.js 应用程序中,可以使用 process.env 对象来设置环境变量。例如:

      process.env.MY_VARIABLE = 'value';

通过以上方式设置的环境变量,都可以通过 process.env 对象来访问。例如:

console.log(process.env.MY_VARIABLE); // 输出 'value'

请注意,环境变量的名称通常是大写的,以区分于其他变量。在设置和访问环境变量时,大小写敏感。

dotenv 使用

dotenv 是一个 Node.js 库,它允许你将环境变量从一个 .env 文件加载到 process.env 中。这样做的好处是,你可以在代码中使用这些环境变量,而不必硬编码它们,并且可以在不同的环境(如开发、测试、生产)中轻松切换这些环境变量。

dotenv 库的原理如下:

  1. 安装:首先,你需要在你的 Node.js 项目中安装 dotenv 库。你可以使用 npm(Node Package Manager)来安装它:

    npm install dotenv
  2. 创建 .env 文件:在你的项目根目录下创建一个 .env 文件,并在其中定义你的环境变量。例如:

    DB_HOST=localhost
    DB_USER=root
    DB_PASS=s1mpl3
  3. 加载 .env 文件:在你的 Node.js 应用程序中,使用 require('dotenv').config() 来加载 .env 文件。这通常在你的应用程序的入口文件(如 app.js 或 server.js)中完成。例如:

    require('dotenv').config();
  4. 使用环境变量:现在,你可以在你的代码中使用 process.env 对象来访问这些环境变量。例如:

    const dbHost = process.env.DB_HOST;
    const dbUser = process.env.DB_USER;
    const dbPass = process.env.DB_PASS;
  5. 环境变量的优先级dotenv 加载的环境变量会覆盖任何已经存在于 process.env 中的同名变量。这意味着,如果你的操作系统中已经设置了 DB_HOST 环境变量,那么 dotenv 加载的值将覆盖它。
  6. 忽略文件:默认情况下,dotenv 会加载 .env 文件。如果你想忽略某个 .env 文件,可以创建一个 .env.example 文件,并在其中列出所有的环境变量,但不提供任何值。这样,其他开发者就可以根据这个文件创建自己的 .env 文件,而不会覆盖已经存在的环境变量。
  7. 加载特定环境的 .env 文件dotenv 允许你根据当前的环境(如 developmenttestproduction)加载不同的 .env 文件。例如,你可以有 .env.development.env.test 和 .env.production 文件,然后在你的应用程序中根据需要加载相应的文件。

    require('dotenv').config({ path: `.env.${process.env.NODE_ENV}` });

通过使用 dotenv,你可以轻松地管理和使用环境变量,而不必担心它们会泄露到版本控制系统中。

cross-env

在大多数 Unix-like 系统(如 Linux 和 macOS)中,你可以直接在命令行中设置环境变量并运行 Node.js 应用程序,而不需要使用 cross-env。例如,你可以使用以下命令:

NODE_ENV=production node app.js

这将在当前 shell 会话中设置 NODE_ENV 环境变量为 production,然后启动 app.js 文件。

然而,如果你在 Windows 系统上运行上述命令,它可能不会按预期工作,因为 Windows 的命令行语法与 Unix-like 系统不同。在 Windows 中,你需要使用 set 命令来设置环境变量,然后启动 Node.js 应用程序:

set NODE_ENV=production
node app.js

或者,你可以使用 cross-env 库来在 Windows 上设置环境变量,因为 cross-env 是一个跨平台的工具,它会根据操作系统自动选择正确的命令。

如果你不想使用 cross-env,并且你的应用程序只在 Unix-like 系统上运行,那么直接使用 NODE_ENV=production node app.js 命令是完全可以的。然而,如果你需要在 Windows 上运行应用程序,你应该使用 set 命令或者 cross-env

如果你在 Windows 上使用 cross-env,它会自动检测你的操作系统并使用适当的命令来设置环境变量。这样做的好处是,你的代码可以在不同的操作系统上运行,而无需修改。


http://www.ppmy.cn/news/1535723.html

相关文章

Element UI教程:如何将Radio单选框的圆框改为方框

大家好,今天给大家带来一篇关于Element UI的使用技巧。在项目中,我们经常会用到Radio单选框组件,默认情况下,Radio单选框的样式是圆框。但有时候,为了满足设计需求,我们需要将圆框改为方框,如下…

03.useToggler

在 React 应用中,切换布尔状态是一个常见的需求,比如开关按钮、显示/隐藏元素等。useToggler 钩子提供了一种简洁而高效的方式来管理这种二元状态。这个自定义钩子不仅简化了代码,还提高了组件的可读性和可维护性。以下是如何实现和使用这个自定义钩子: const useToggler …

佑航科技Pre-A+轮融资成功:加速车载超声波芯片研发与量产

近日,超声波芯片领域的领先企业珠海佑航科技有限公司(简称“佑航科技”)宣布成功完成数千万元的Pre-A+轮战略融资。本轮融资由上市公司思瑞浦微电子旗下的芯阳基金进行战略投资,标志着佑航科技在车载超声波芯片及传感器领域的研发与量产能力迈上了新台阶。此次融资不仅为佑…

python并发编程实战

python并发编程有三种 多线程Thread多进程Process多协程Coroutine cpu密集型计算 cpu密集型也叫计算密集型,是指I/O在很短的时间就可以完成,cpu需要大量的计算处理,特点是cpu占用率相当高 例如:压缩解压缩、加密解密、正则表达…

Web3 游戏周报(9.22 - 9.28)

回顾上周的区块链游戏概况,查看 Footprint Analytics 与 ABGA 最新发布的数据报告。 【9.22-9.28】Web3 游戏行业动态: Axie Infinity 将 Fortune Slips 的冷却时间缩短至 24 小时,从而提高玩家的收入。 Web3 游戏开发商 Darkbright Studios…

音频搜索公司 DeepGram,定位语音搜索AI大脑,DeepGram想做“音频版”

1. 亦仁分享 DeepGram 成立于 2015 年,位于美国山景城,是一家基于 AI 技术的音频搜索引擎公司。运用机器学习进行语音识别、搜寻重要时刻并对音频和视频进行分类,帮助用户快速索引和浏览音频和视频文件,包括电话语音、会议语音、…

数据分析之Spark框架介绍

文章目录 概述一、发展历程与背景二、核心特点三、生态系统与组件四、应用场景五、与其他大数据技术的比较 核心概念1. 弹性分布式数据集(RDD, Resilient Distributed Dataset)2. 转换(Transformations)和动作(Actions…

C++ 语言特性10 - 委托构造函数

1:什么是委托构造函数? 在C中,委托构造函数(Delegating Constructor)是一种特殊的构造函数,它在构造函数的初始化列表中调用同一个类中的另一个构造函数,从而实现代码的复用。这种特性在C11中引…