在 Vue 3 中,怎么管理环境变量

在 Vue 3 中,环境变量管理是通过 .env 文件来进行的,利用这些文件可以让开发者根据不同的环境(开发、生产、测试等)配置不同的变量。这一机制由 Vite 构建工具支持,它帮助开发者根据不同的环境需求做出相应配置。

1. 环境变量的基本概念

在前端开发中,环境变量通常用于存储配置信息、密钥、API 地址等,这些信息可能会因不同的部署环境而有所不同。通过 .env 文件,开发者可以确保在开发环境、生产环境等不同环境下使用不同的配置,而无需手动修改代码。

2. .env 文件的结构

2.1 文件命名规则

Vue 3 使用 Vite 作为构建工具,Vite 支持多种环境变量文件,文件的命名规则如下:

  • .env: 默认的环境配置文件,会在所有环境中加载。
  • .env.local: 用于本地开发的配置,不应被版本控制追踪。它的优先级高于 .env。
  • .env.development: 用于开发环境的配置文件。
  • .env.production: 用于生产环境的配置文件。
  • .env.test: 用于测试环境的配置文件。
  • .env.[mode].local: 对于特定环境的本地配置文件,优先级最高。

当你运行 vite 时,Vite 会根据不同的构建模式来加载相应的环境变量文件。

2.2 环境变量的命名规范

Vite 只会暴露以 VITE_ 为前缀的环境变量,避免泄露敏感数据。对于没有 VITE_ 前缀的环境变量,它们不会暴露到客户端代码中,从而保护服务器端的敏感信息。

例子:

正确的命名:VITE_API_URL=https://api.example.com
错误的命名(不会暴露):API_KEY=abcdef12345

3. 设置 .env 文件

3.1 基本环境变量设置

你可以在 .env 文件中设置一些通用的环境变量,比如 API 的 URL、应用标题、版本号等。

示例 .env 文件:

VITE_API_URL=https://api.example.com
VITE_APP_TITLE=Vue App
VITE_VERSION=1.0.0

3.2 环境特定的设置

Vite 允许你根据不同的环境设置不同的变量。例如,你可以为开发环境、生产环境设置不同的 API 地址。

示例 .env.development 文件:

VITE_API_URL=http://localhost:3000
VITE_APP_TITLE=Vue Dev App

示例 .env.production 文件:

VITE_API_URL=https://prod.api.example.com
VITE_APP_TITLE=Vue Production App

4. 使用环境变量

在 Vue 3 中,你可以通过 import.meta.env 来访问这些环境变量。通过这种方式,你可以在代码中动态地使用不同环境下的配置。

在 JavaScript/TypeScript 中使用环境变量
你可以直接通过 import.meta.env 访问环境变量的值,例如:

// src/main.js
console.log(import.meta.env.VITE_API_URL);  // 访问 API URL
console.log(import.meta.env.VITE_APP_TITLE); // 访问应用标题

在 Vue 组件中使用环境变量
你也可以在 Vue 单文件组件中使用环境变量。举个例子:

<template><div><h1>{{ appTitle }}</h1><p>{{ apiUrl }}</p></div>
</template><script setup>
const appTitle = import.meta.env.VITE_APP_TITLE;
const apiUrl = import.meta.env.VITE_API_URL;
</script>

使用条件判断环境变量
你可以通过环境变量来实现条件判断,根据不同的环境加载不同的功能:

if (import.meta.env.MODE === 'development') {console.log('This is the development environment.');
}

5. 切换环境

Vite 允许你通过设置不同的构建模式来切换环境。你可以通过以下命令来指定使用哪种环境:

  • 开发环境:运行 vite 或 npm run dev,默认使用 .env.development 或 .env。
  • 生产环境:运行 vite build 或 npm run build,会使用 .env.production 或 .env。
  • 测试环境:运行 vite build --mode test,它会加载 .env.test 配置。

你还可以通过命令行参数来指定特定的环境:

vite --mode production  # 启动生产环境
vite --mode development  # 启动开发环境

6. 优先级规则

Vite 会根据不同文件的优先级来加载 .env 文件。加载优先级从高到低如下:

  • .env.local: 本地开发环境使用的配置文件,优先级最高。
  • .env.[mode].local: 特定环境的本地配置文件,优先级高于 .env.[mode]。
  • .env: 默认的环境配置文件,适用于所有环境。
  • .env.[mode]: 特定环境的配置文件,优先级低于 .env.local 和 .env.[mode].local。

7 案例

假设我们有以下需求:

  • 在 开发环境(local)使用 http://localhost:3000 作为 API 地址。
  • 在 生产环境(production)使用 https://api.example.com 作为 API 地址。
  • 应用标题 VITE_APP_TITLE 在不同环境下应该有所不同。
  1. 创建 .env 文件
    首先,创建基础的 .env 文件,并设置默认的环境变量:

.env(默认环境):

VITE_APP_TITLE=Vue Default App
VITE_API_URL=https://api.example.com

这个配置会作为默认设置,适用于没有特定环境标识时的情况。

  1. 创建开发环境和生产环境配置文件
    接下来,为开发环境和生产环境分别创建配置文件。可以使用 .env.development 和 .env.production 来覆盖 .env 文件中的配置。

.env.development(开发环境配置)

VITE_APP_TITLE=Vue Dev App
VITE_API_URL=http://localhost:3000

.env.production(生产环境配置)

VITE_APP_TITLE=Vue Production App
VITE_API_URL=https://api.example.com
  1. 在 Vue 3 组件中使用环境变量
    接下来,在 Vue 3 应用中使用这些环境变量。我们可以通过 import.meta.env 来读取环境变量。
    src/App.vue(Vue 组件)
<template><div><h1>{{ appTitle }}</h1><p>API URL: {{ apiUrl }}</p></div>
</template><script setup>
const appTitle = import.meta.env.VITE_APP_TITLE;
const apiUrl = import.meta.env.VITE_API_URL;
</script><style scoped>
h1 {color: #42b983;
}
</style>

在这个 Vue 组件中,我们通过 import.meta.env.VITE_APP_TITLE 和 import.meta.env.VITE_API_URL 获取并显示环境变量的值。

  1. 启动应用并测试
  2. 开发环境
    当我们在开发环境中运行应用时,Vite 会加载 .env.development 文件中的变量。我们可以通过以下命令启动开发服务器:
    这时,页面会显示如下内容:
Vue Dev App
API URL: http://localhost:3000
  1. 生产环境
    在生产环境中,Vite 会加载 .env.production 文件中的变量。要进行生产环境构建并启动,可以运行以下命令:
npm run build  # 构建生产环境
npm run preview  # 预览生产环境

这时,页面会显示如下内容:

Vue Production App
API URL: https://api.example.com

通过 .env 文件,你可以轻松管理 Vue 3 应用中的环境配置。你可以为不同的环境(开发、生产、测试等)设置不同的变量,并通过 import.meta.env 访问这些变量。Vite 的强大之处在于它提供了灵活的配置机制,帮助开发者快速适应不同环境下的需求。在使用 .env 文件时要特别注意敏感数据的处理,避免将敏感信息暴露到前端。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/68343.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python的那些事第三篇:Python编程的“调味料”与“交流术”运算符与输入输出

运算符与输入输出&#xff1a;Python编程的“调味料”与“交流术” 在编程的世界里&#xff0c;Python不仅仅是一门语言&#xff0c;它更像是一位充满智慧的厨师&#xff0c;而运算符和输入输出则是它手中的“调味料”和“交流术”。没有这些工具&#xff0c;代码就会像没有加…

windows下部署安装 ELK,nginx,tomcat日志分析

1.安装包 如上就是elk- windows下部署需要用到的安装包 &#xff08;ps:注意版本需要对应&#xff0c;另外es7版本对应是 jdk8&#xff0c;若更高版本 请自行查询版本对应号&#xff09;。 下载地址&#xff1a; Past Releases of Elastic Stack Software | Elastic 此地址可…

内联函数——减少函数调用开销的高效利器

在C中&#xff0c;内联函数&#xff08;Inline Function&#xff09;是一种优化手段&#xff0c;它通过将函数的代码插入到每个调用点来避免函数调用的开销。本文将详细介绍内联函数的工作原理、应用场景以及注意事项。 1. 什么是内联函数&#xff1f; 内联函数是一种特殊的函…

docker安装MySQL8:docker离线安装MySQL、docker在线安装MySQL、MySQL镜像下载、MySQL配置、MySQL命令

一、镜像下载 1、在线下载 在一台能连外网的linux上执行docker镜像拉取命令 docker pull mysql:8.0.41 2、离线包下载 两种方式&#xff1a; 方式一&#xff1a; -&#xff09;在一台能连外网的linux上安装docker执行第一步的命令下载镜像 -&#xff09;导出 # 导出镜…

【AI论文】魔鬼在细节:关于在训练专用混合专家模型时实现负载均衡损失

摘要&#xff1a;本文重新审视了在训练混合专家&#xff08;Mixture-of-Experts, MoEs&#xff09;模型时负载均衡损失&#xff08;Load-Balancing Loss, LBL&#xff09;的实现。具体来说&#xff0c;MoEs的LBL定义为N_E乘以从1到N_E的所有专家i的频率f_i与门控得分平均值p_i的…

游戏策划的分类

P3游戏策划分类 1.程序2.美术3.策划 程序&#xff1a;一般分为客户端程序和服务器程序 客户端程序一般负责游戏的前端画面表现 服务器程序负责游戏的后端运算 美术&#xff1a;角色原画&#xff0c;角色模型动作&#xff0c;场景原画&#xff0c;场景模型&#xff0c;UI设计&a…

C语言编程笔记:文件处理的艺术

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文一、为什么要用文件二、文件的分…

sqlzoo答案4:SELECT within SELECT Tutorial

sql练习&#xff1a;SELECT within SELECT Tutorial - SQLZoo world表&#xff1a; namecontinentareapopulationgdpAfghanistanAsia6522302550010020343000000AlbaniaEurope28748283174112960000000AlgeriaAfrica238174137100000188681000000AndorraEurope46878115371200000…

OpenAI的真正对手?DeepSeek-R1如何用强化学习重构LLM能力边界——DeepSeek-R1论文精读

2025年1月20日&#xff0c;DeepSeek-R1 发布&#xff0c;并同步开源模型权重。截至目前&#xff0c;DeepSeek 发布的 iOS 应用甚至超越了 ChatGPT 的官方应用&#xff0c;直接登顶 AppStore。 DeepSeek-R1 一经发布&#xff0c;各种资讯已经铺天盖地&#xff0c;那就让我们一起…

Baklib如何重塑内容中台的智能化推荐系统实现个性化服务

内容概要 在数字内容日益丰富的今天&#xff0c;内容中台的智能化推荐系统显得尤为重要。它通过分析和处理海量的数据&#xff0c;为用户提供个性化的内容推荐&#xff0c;从而提升用户体验。在智能化推荐系统中&#xff0c;主要由以下几个部分构成&#xff1a; 部分主要功能…

从零推导线性回归:最小二乘法与梯度下降的数学原理

​ 欢迎来到我的主页&#xff1a;【Echo-Nie】 本篇文章收录于专栏【机器学习】 本文所有内容相关代码都可在以下仓库中找到&#xff1a; Github-MachineLearning 1 线性回归 1.1 什么是线性回归 线性回归是一种用来预测和分析数据之间关系的工具。它的核心思想是找到一条直…

【MySQL】 数据类型

欢迎拜访&#xff1a;雾里看山-CSDN博客 本篇主题&#xff1a;【MySQL】 数据类型 发布时间&#xff1a;2025.1.27 隶属专栏&#xff1a;MySQL 目录 数据类型分类数值类型tinyint类型数值越界测试结果说明 bit类型基本语法使用注意事项 小数类型float语法使用注意事项 decimal语…

Tensor 基本操作5 device 管理,使用 GPU 设备 | PyTorch 深度学习实战

前一篇文章&#xff0c;Tensor 基本操作4 理解 indexing&#xff0c;加减乘除和 broadcasting 运算 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started Tensor 基本使用 检查设备创建 tensor 时声明设备更改默认设备创建…

砥砺奋进,展望新程0114

2024年&#xff0c;非凸科技在金融数智化浪潮中奋楫扬帆&#xff0c;实现了跨越式发展。面对市场的起伏变化&#xff0c;我们始终坚守蓄势待发的沉稳姿态&#xff0c;以笃定之心深耕&#xff0c;以坚毅之态磨砺&#xff0c;以无畏之勇突破&#xff0c;于时代洪流中稳健前行。 …

数字人+展厅应用方案:开启全新沉浸式游览体验

随着人们生活质量的不断提升&#xff0c;对于美好体验的追求日益增长。在展厅展馆领域&#xff0c;传统的展示方式已难以满足大众日益多样化的需求。而通过将数字人与展厅进行深度结合&#xff0c;可以打造数字化、智能化新型展厅&#xff0c;不仅能提升展示效果&#xff0c;还…

基于区块链的数字身份认证:安全与隐私的未来

友友们好! 我的新专栏《Python进阶》正式启动啦!这是一个专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会找到: ● 深入解析:每一篇文章都将…

RK3588平台开发系列讲解(ARM篇)ARM64底层中断处理

文章目录 一、异常级别二、异常分类2.1、同步异常2.2、异步异常三、中断向量表沉淀、分享、成长,让自己和他人都能有所收获!😄 一、异常级别 ARM64处理器确实定义了4个异常级别(Exception Levels, EL),分别是EL0到EL3。这些级别用于管理处理器的特权级别和权限,级别越高…

AIP-130 方法

编号130原文链接AIP-130: Methods状态批准创建日期2023-03-13更新日期2023-03-13 API由若干个方法组成&#xff0c;方法是服务代表消费者执行的特定操作。 指南 方法类别 以下列举了现存的多种方法类别&#xff0c;通常根据方法操作的对象&#xff08;例如集合或资源&#…

下载Visual Studio Community 2019

官方链接如下&#xff1a;Visual Studio Community 2019下载链接 https://learn.microsoft.com/zh-cn/visualstudio/releases/2019/system-requirements#download 目前官方仅建议2022版&#xff0c;已经关闭vs2019等旧版本&#xff0c;哪天开放了&#xff0c;记得踢我一下。 …

K8s运维管理平台 - xkube体验:功能较多

目录 简介Lic安装1、需要手动安装MySQL&#xff0c;**建库**2、启动命令3、[ERROR] GetNodeMetric Fail:the server is currently unable to handle the request (get nodes.metrics.k8s.io qfusion-1) 使用总结优点优化 补充1&#xff1a;layui、layuimini和beego的详细介绍1.…