当前位置: 首页 > news >正文

Dotenv 入门教程

什么是 Dotenv?

Dotenv 是一个轻量级的 Node.js 模块,用于将环境变量从 .env 文件加载到 process.env 对象中。它帮助开发者将敏感信息(如数据库密码、API 密钥)与代码分离,提升应用的安全性和可配置性。

快速开始

1. 安装 Dotenv

在项目根目录执行以下命令:

npm install dotenv

2. 创建 .env 文件

在项目根目录新建 .env 文件,添加环境变量:

DB_HOST=localhost
DB_USER=root
DB_PASS=your_secure_password
API_KEY=12345abc

3. 加载环境变量

在应用入口文件(如 index.js)顶部添加:

require('dotenv').config();

或使用 ES6 语法:

import 'dotenv/config';

4. 访问变量

通过 process.env 对象获取变量:

console.log(process.env.DB_HOST); // 输出 localhost

高级配置

自定义文件路径

指定非根目录的 .env 文件:

require('dotenv').config({ path: './config/.env.custom' });

或通过环境变量指定:

DOTENV_CONFIG_PATH=./.env.custom node app.js

调试模式

开启调试以排查加载问题:

require('dotenv').config({ debug: true });

多环境配置

创建不同环境的文件(如 .env.development.env.production),使用时通过 --env-file 指定:

node --env-file=.env.production app.js

最佳实践

1. 安全第一

  • 忽略 .env 文件:在 .gitignore 中添加 .env,避免提交到版本控制。
  • 敏感信息管理:生产环境建议使用秘密管理工具(如 AWS Secrets Manager、HashiCorp Vault)。

2. 变量命名规范

  • 使用全大写和下划线分隔(如 STRIPE_API_KEY)。
  • 避免重复或模糊的命名。

3. 生产环境优化

  • Node.js 14+ 支持原生 --env-file 标志,减少依赖:
    node --env-file=.env app.js
    
  • Docker 用户可通过 docker run -e VAR=value 传递变量。

4. TypeScript 支持

安装类型声明包:

npm install @types/dotenv --dev

或在 tsconfig.json 中配置:

{"compilerOptions": {"types": ["node", "dotenv"]}
}

常见问题

变量未加载?

  1. 检查 .env 文件路径是否正确。
  2. 确保 require('dotenv').config() 在代码顶部执行。
  3. 变量名是否包含特殊字符(建议仅用字母、数字、下划线)。

如何设置默认值?

使用逻辑或操作符:

const port = process.env.PORT || 3000;

在 React 中使用?

需配合 dotenv-webpack 插件:

  1. 安装插件:
    npm install dotenv-webpack --dev
    
  2. 修改 webpack.config.js
    const Dotenv = require('dotenv-webpack');
    module.exports = {plugins: [new Dotenv()]
    };
    

示例项目结构

project-root/
├── .env
├── .env.production
├── index.js
├── package.json
└── node_modules/

替代方案

  • Node.js 原生方案(v20.6.0+):
    node --env-file=.env app.js
    
  • 秘密管理工具:Infisical、Doppler、AWS Secrets Manager

通过 Dotenv,你可以更安全、高效地管理应用配置。立即开始,让你的项目告别硬编码!

http://www.dtcms.com/a/322543.html

相关文章:

  • 政府数字化大屏系统 - Flask实现方案
  • 上海AI Lab、浙大EagleLab等提出RRVF:利用「验证非对称性」,只输入图片学习视觉推理
  • 接口文档深入解析
  • OpenAI开源大模型 GPT-OSS 开放权重语言模型解析:技术特性、部署应用及产业影响
  • Python基础教程(七)匹配模式:隐藏在结构之美中的编程革命
  • JVM常用参数有哪些?
  • Orange的运维学习日记--36.NFS详解与服务部署
  • 人脸情绪检测数据集-9,400 张图片 智能客服系统 在线教育平台 心理健康监测 人机交互优化 市场研究与广告 安全监控系统
  • WinForm 复合控件(用户控件):创建与使用指南
  • 【2025】Datawhale AI夏令营-多模态RAG-Task1、Task2笔记-任务理解与Baseline代码解读
  • 线程池多反应堆服务器webserver(c++)
  • 免费PDF编辑软件 pdf24-creator 及其安装包
  • 【无标题】AI 赋能日常效率:实用案例与操作心得分享
  • AI工具在数据质量管理中的应用
  • 电子电气架构 --- 电气/电子架构迁移已拉开帷幕
  • CamX-骁龙相机修改
  • Docker Desktop 使用操作指南
  • 费米问题:估算北京有多少量特斯拉汽车?
  • 虚拟机Ubuntu重启发现找不到共享文件夹
  • 202506 电子学会青少年等级考试机器人一级理论综合真题
  • 「iOS」————响应者链与事件传递链
  • 【工具变量】全国省级农业保险保费收入与赔付支出数据更新(2001-2023年)
  • wsl ubuntu访问(挂载)vmware vmdk磁盘教程
  • React Native jpush-react-native极光推送 iOS生产环境接收不到推送
  • [Oracle] ADD_MONTHS()函数
  • 可直接运行的 Playwright C# 自动化模板
  • day22|学习前端ts语言
  • 我想做自动化报社保,用哪种技术更好一点呢?
  • 7_基于深度学习的安全帽检测识别系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
  • 微信原生小程序 Timeline 组件实现