环境变量里面的.env文件是如何起作用的?

1. 配置文件的加载机制:

让我们看看代码中是如何处理这些配置文件的:

js 复制代码
// src/config/index.js 中的代码
const loadEnv = () => {
  const env = process.env.NODE_ENV || 'development';  // 获取当前环境
  const envPath = path.resolve(process.cwd(), `.env.${env}`);  // 根据环境选择配置文件
  
  dotenv.config({ path: envPath });  // 加载对应的配置文件
};

通过path.resolve(process.cwd(),.env.${env}); 获取到环境变量的文件,然后读取信息。

2. 环境切换机制:

在 package.json 中定义了不同环境的启动命令:

js 复制代码
{
  "scripts": {
    "dev": "cross-env NODE_ENV=development nodemon src/app.js",    // 开发环境
    "start": "cross-env NODE_ENV=production node src/app.js"       // 生产环境
  }
}

工作流程:

  1. 开发环境(执行 npm run dev):
  • 设置 NODE_ENV=development
  • 加载 .env.development 文件
  • 使用 nodemon 启动服务(支持热重载)
  • 输出详细的调试信息
  • 使用本地数据库配置
  1. 生产环境(执行 npm start):
  • 设置 NODE_ENV=production
  • 加载 .env.production 文件
  • 使用 node 直接启动服务
  • 只输出重要的日志信息
  • 使用生产环境数据库配置

3. 配置文件的使用:

在代码中通过 process.env 来使用这些配置,例如:

js 复制代码
// src/config/db.js 中的数据库配置
const sequelize = new Sequelize({
  dialect: 'mysql',
  host: process.env.DB_HOST,        // 使用配置文件中的数据库主机
  port: process.env.DB_PORT,        // 使用配置文件中的数据库端口
  database: process.env.DB_NAME,    // 使用配置文件中的数据库名
  username: process.env.DB_USER,    // 使用配置文件中的用户名
  password: process.env.DB_PASSWORD // 使用配置文件中的密码
});

// src/app.js 中的跨域配置
app.use(cors({
  origin: process.env.CORS_ORIGIN,  // 使用配置文件中的跨域配置
  credentials: true
}));
  1. 安全考虑:
  • 这两个文件都在 .gitignore 中,不会被提交到代码仓库
  • 生产环境的敏感信息(如密码、密钥)应该通过安全的方式管理
  • 配置文件中的值可以被环境变量覆盖

使用示例:

js 复制代码
# 开发环境启动
npm run dev
# 此时会加载 .env.development 的配置
# 使用 nodemon 启动,支持热重载

# 生产环境启动
npm start
# 此时会加载 .env.production 的配置
# 使用 node 直接启动,不支持热重载
相关推荐
用户908324602734 分钟前
Spring AI + RAG + SSE 实现带搜索来源的智能问答完整方案
前端·后端
GISer_Jing9 分钟前
阿里开源纯前端浏览器自动化 PageAgent,[特殊字符] 浏览器自动化变天啦?
前端·人工智能·自动化·aigc·交互
清风徐来QCQ27 分钟前
js中的模板字符串
开发语言·前端·javascript
成都渲染101云渲染666632 分钟前
Houdini+Blender高效渲染方案(高配算力+全渲染器兼容)
前端·系统架构
SuperEugene1 小时前
Vue3 + Element Plus 表格实战:批量操作、行内编辑、跨页选中逻辑统一|表单与表格规范篇
开发语言·前端·javascript
极梦网络无忧1 小时前
基于 Vite + Vue3 的组件自动注册功能
前端·javascript·vue.js
Predestination王瀞潞1 小时前
5.4.3 通信->WWW万维网内容访问标准(W3C):WWW(World Wide Web) 协议架构(分层)
前端·网络·网络协议·架构·www
爱学习的程序媛2 小时前
【Web前端】优化Core Web Vitals提升用户体验
前端·ui·web·ux·用户体验
zabr2 小时前
花了 100+ 篇笔记,我整理出 了一套 AI Agent 工程完全指南
前端·后端·agent
软弹2 小时前
深入理解 React Ref 机制:useRef 与 forwardRef 的协作原理
前端·javascript·react.js