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

Vue CLI 环境变量和文件加载规则.env文件

Vue CLI 通过一套明确的环境变量和文件加载规则来确定使用哪个 .env 文件。以下是详细的工作原理:

一、核心决定因素

1. 模式 (Mode) 是主要决定因素

Vue CLI 根据你运行的命令或手动设置的模式来决定加载哪个环境文件:

# 开发模式 → 加载 .env.development
npm run serve        # 或 vue-cli-service serve# 生产模式 → 加载 .env.production  
npm run build        # 或 vue-cli-service build# 测试模式 → 加载 .env.test
npm run test:unit    # 或 vue-cli-service test:unit

2. 环境变量优先级

Vue CLI 按照以下顺序加载环境变量(后面的会覆盖前面的):

  1. .env - 所有环境的默认配置
  2. .env.[mode] - 特定模式的配置(如 .env.development
  3. 命令行参数 - 最高优先级

二、环境文件加载规则

文件加载顺序示例:

# 运行 vue-cli-service serve (开发模式)
1. 加载 .env
2. 加载 .env.development
3. 加载 .env.local (如果存在)
4. 加载 .env.development.local (如果存在)# 运行 vue-cli-service build (生产模式)  
1. 加载 .env
2. 加载 .env.production
3. 加载 .env.local (如果存在)
4. 加载 .env.production.local (如果存在)

三、模式的具体判断逻辑

1. 默认模式映射

Vue CLI 内置了默认的模式映射:

命令默认模式加载的文件
vue-cli-service servedevelopment.env.development
vue-cli-service buildproduction.env.production
vue-cli-service test:unittest.env.test

2. 自定义模式

你可以创建自定义模式并使用对应的环境文件:

# 创建自定义环境文件
.env.staging          # 预发布环境# 使用自定义模式
vue-cli-service build --mode staging

四、环境变量命名规则

1. 文件中的变量命名

.env 文件中,变量需要以 VUE_APP_ 开头:

# .env.development
VUE_APP_API_URL=https://api-dev.example.com
VUE_APP_DEBUG=true# .env.production
VUE_APP_API_URL=https://api.example.com
VUE_APP_DEBUG=false

2. 在代码中访问

// 在 Vue 组件或 JS 文件中使用
console.log(process.env.VUE_APP_API_URL)
console.log(process.env.VUE_APP_DEBUG)
console.log(process.env.NODE_ENV) // 自动注入:'development' 或 'production'

五、手动指定模式

1. 通过命令行参数

# 显式指定模式
npm run serve -- --mode staging
vue-cli-service serve --mode staging# 构建时指定不同模式
vue-cli-service build --mode development  # 开发环境构建
vue-cli-service build --mode staging      # 预发布环境构建

2. 通过 package.json 脚本

{"scripts": {"serve": "vue-cli-service serve","build": "vue-cli-service build","build:staging": "vue-cli-service build --mode staging","build:dev": "vue-cli-service build --mode development"}
}

六、环境文件示例

1. 基础环境文件结构

project-root/
├── .env                 # 全局默认配置
├── .env.development     # 开发环境配置
├── .env.production      # 生产环境配置
├── .env.staging         # 预发布环境配置
├── .env.local           # 本地覆盖配置(不提交到git)
└── .env.development.local # 开发本地配置

2. 文件内容示例

.env (全局默认)

# 所有环境共享的配置
VUE_APP_NAME=My Vue App
VUE_APP_VERSION=1.0.0

.env.development (开发环境)

# 开发环境配置
NODE_ENV=development
VUE_APP_API_URL=https://api-dev.example.com
VUE_APP_DEBUG=true
VUE_APP_SENTRY_DSN=  # 开发环境可能不需要 Sentry

.env.production (生产环境)

# 生产环境配置
NODE_ENV=production
VUE_APP_API_URL=https://api.example.com
VUE_APP_DEBUG=false
VUE_APP_SENTRY_DSN=https://sentry.example.com/your-dsn

.env.staging (预发布环境)

# 预发布环境配置
NODE_ENV=production  # 注意:构建模式仍然是 production
VUE_APP_API_URL=https://api-staging.example.com
VUE_APP_DEBUG=true   # 预发布环境可能需要调试

七、在 Jenkins 中配置不同环境

1. Pipeline 示例

pipeline {agent anyenvironment {// 根据构建参数设置模式VUE_CLI_MODE = params.BUILD_MODE ?: 'production'}stages {stage('Build') {steps {script {// 根据不同的模式使用不同的环境文件if (env.VUE_CLI_MODE == 'staging') {sh '''echo "Building for staging environment"npm run build:staging'''} else if (env.VUE_CLI_MODE == 'development') {sh '''echo "Building for development environment"  npm run build:dev'''} else {sh '''echo "Building for production environment"npm run build'''}}}}}parameters {choice(name: 'BUILD_MODE',choices: ['production', 'staging', 'development'],description: '选择构建环境')}
}

2. 使用环境变量覆盖

stage('Build') {steps {sh '''# 使用环境变量覆盖 .env 文件中的配置export VUE_APP_API_URL=${API_URL}export VUE_APP_VERSION=${APP_VERSION}npm run build'''}
}

八、调试环境变量

1. 查看加载的环境变量

// 在 main.js 或任何文件中添加
console.log('当前环境变量:', process.env)
console.log('API URL:', process.env.VUE_APP_API_URL)
console.log('当前模式:', process.env.NODE_ENV)

2. 创建调试脚本

package.json 中添加:

{"scripts": {"env:debug": "vue-cli-service serve --mode development --debug","env:info": "node -e \"console.log('NODE_ENV:', process.env.NODE_ENV); console.log('VUE_APP vars:', Object.keys(process.env).filter(key => key.startsWith('VUE_APP_')))\""}
}

九、重要注意事项

  1. .env.local 文件:本地覆盖,应该添加到 .gitignore
  2. 变量前缀:只有 VUE_APP_ 开头的变量才会被嵌入客户端代码
  3. 敏感信息:不要在 .env 文件中存储密码等敏感信息
  4. 构建时确定:环境变量在构建时被嵌入,运行时无法更改

十、总结

Vue CLI 通过以下方式确定使用哪个环境文件:

  1. 命令决定模式serve → development,build → production
  2. 模式决定文件:模式名对应 .env.[mode] 文件
  3. 加载顺序.env.env.[mode].env.local.env.[mode].local
  4. 优先级:后面的文件覆盖前面的配置

通过理解这个机制,你可以灵活地为不同环境配置不同的变量。


文章转载自:

http://3cpON9U4.yhxhq.cn
http://flGXEv8d.yhxhq.cn
http://4RXsdhPi.yhxhq.cn
http://IQ5jyVNH.yhxhq.cn
http://bXrrjgZ8.yhxhq.cn
http://SOj9k6Hi.yhxhq.cn
http://rJVdiGAm.yhxhq.cn
http://kZw5Dp1f.yhxhq.cn
http://J3AA1IsL.yhxhq.cn
http://S6qbWdXC.yhxhq.cn
http://z9HIe6ab.yhxhq.cn
http://kFAVbp0q.yhxhq.cn
http://lZxtuZDW.yhxhq.cn
http://E00Xq9RK.yhxhq.cn
http://1KeHbCnL.yhxhq.cn
http://dp6DbV1m.yhxhq.cn
http://rU3lwXlB.yhxhq.cn
http://gYCjce8g.yhxhq.cn
http://hsflLSbF.yhxhq.cn
http://ZgwYehoN.yhxhq.cn
http://P2ecjm2N.yhxhq.cn
http://a7Z5hA89.yhxhq.cn
http://V8hHV9dw.yhxhq.cn
http://1zdaYnUP.yhxhq.cn
http://QPLpnYHb.yhxhq.cn
http://tF6KEQ2r.yhxhq.cn
http://VERv54gd.yhxhq.cn
http://hahRIDU9.yhxhq.cn
http://MsmdKLBy.yhxhq.cn
http://lwTKpIaS.yhxhq.cn
http://www.dtcms.com/a/369320.html

相关文章:

  • JS网站测压代码
  • 前端笔记:基于Dialog自定义实现类似抽屉效果
  • 分片上传-
  • 在复杂工况中,天硕工业级SSD固态硬盘是如何保障数据安全的?
  • java解析网络大端、小端解析方法
  • 【1】MOS管的结构及其工作原理
  • 迅为RK3568开发板OpenHarmonyv3.2-Beta4版本测试-命令终端
  • 企业级 AI Agent 开发指南:基于函数计算 FC Sandbox 方案实现类 Chat Coding AI Agent
  • window 运维
  • Chatwith:定制你的AI 聊天机器人
  • 智慧城市SaaS平台之智慧城管十大核心功能(五):监督检查综合管理系统
  • 电脑活动追踪全解析:六款软件助企业实现数字化精细管理
  • 永磁同步电机负载估计算法--非线性扩张状态观测器
  • 逆天!影响因子0.1,竟然划分到中科院1区TOP?
  • Python数据容器介绍(列表、元组、字符串、集合、字典)
  • 2021/07 JLPT听力原文 问题一 4番
  • 【Javascript】Capacitor 文件存储在 Windows 上的位置
  • LinuxC++项目开发日志——高并发内存池(2-整体框架设计)
  • DeepSeek辅助编写在windows中利用mingw编写用到内存映射文件和expat功能的C程序
  • 【前端教程】JavaScript 实现爱好选择与全选/全不选功能
  • 安全产业 出海行动 | 安贝斯受邀参加第六届非传统安全(杭州)国际论坛:靠近国际前沿 拓宽国际视野
  • Ruoyi-vue-plus-5.x第五篇Spring框架核心技术:5.1 Spring Boot自动配置
  • 一招快速识别你的电脑是机械硬盘还是固态硬盘
  • Centos7中部署Dify
  • 微服务架构下生鲜订单分布式事务解决方案指南
  • 电机试验平台:从实验到应用的创新突破
  • GitHub每日最火火火项目(9.5)
  • 十一、标准化和软件知识产权基础知识
  • B.50.10.07-分布式锁核心原理与电商应用
  • 语音识别系统的技术核心:从声音到文字的智能转换