使用 Vue 3、Vite 和 TypeScript 的环境变量配置
使用 Vue 3、Vite 和 TypeScript 的环境变量配置
在开发现代前端应用时,环境变量是一个非常重要的概念。它可以帮助我们根据不同的环境(开发、测试、生产)配置不同的行为,比如 API 请求地址、调试选项等。在 Vue 3、Vite 和 TypeScript 项目中,如何正确配置和使用环境变量是一个经常遇到的问题。
一、初始化 Vue 3 项目
首先,我们需要使用 Vite 来初始化一个 Vue 3 项目,并启用 TypeScript 支持。
npm init vite@latest my-vue-app --template vue-ts
cd my-vue-app
npm install
执行上面的命令后,你将得到一个包含 Vue 3 和 TypeScript 支持的 Vite 项目。
二、环境变量的基础概念
在 Vite 中,环境变量可以通过 .env
文件进行管理。Vite 内置支持基于不同环境(开发、生产等)的变量管理,这意味着你可以为不同的环境创建不同的变量文件。
.env
:适用于所有环境.env.development
:仅适用于开发环境.env.production
:仅适用于生产环境
这些文件中定义的环境变量将会在项目启动时被自动加载。
三、如何定义环境变量
在 .env
文件中定义环境变量非常简单,你只需要按照 KEY=VALUE
的格式来定义即可。
# .env.development
VITE_API_URL=https://dev.api.example.com
VITE_APP_TITLE=MyVueApp (Development)
# .env.production
VITE_API_URL=https://api.example.com
VITE_APP_TITLE=MyVueApp
注意,Vite 要求环境变量的名字必须以 VITE_
前缀开头。这是为了确保这些变量在构建时能够被正确注入到项目中,并防止与其他工具或系统环境变量冲突。
四、在项目中使用环境变量
一旦定义了环境变量,就可以在项目代码中通过 import.meta.env
访问这些变量。例如,在一个 Vue 组件中:
<script lang="ts">
import { defineComponent } from 'vue';export default defineComponent({setup() {const apiUrl = import.meta.env.VITE_API_URL;const appTitle = import.meta.env.VITE_APP_TITLE;console.log('API URL:', apiUrl);console.log('App Title:', appTitle);return { apiUrl, appTitle };}
});
</script>
import.meta.env
是 Vite 提供的一个全局对象,它包含了所有以 VITE_
开头的环境变量。
五、区分不同环境
在项目开发中,我们可能需要区分不同的环境来执行不同的逻辑。可以使用 import.meta.env.MODE
来判断当前的构建环境。
<script lang="ts">
import { defineComponent } from 'vue';export default defineComponent({setup() {if (import.meta.env.MODE === 'development') {console.log('Running in development mode');} else if (import.meta.env.MODE === 'production') {console.log('Running in production mode');}return {};}
});
</script>
import.meta.env.MODE
会返回当前的模式,可以是 development
或 production
,也可以是自定义的模式。
六、TypeScript 环境变量类型提示
为了让 TypeScript 识别我们定义的环境变量,我们可以创建一个 env.d.ts
文件,手动为 import.meta.env
提供类型声明。
在项目根目录下创建 src/env.d.ts
文件,内容如下:
interface ImportMetaEnv {readonly VITE_API_URL: string;readonly VITE_APP_TITLE: string;
}interface ImportMeta {readonly env: ImportMetaEnv;
}
这样,当我们使用 import.meta.env.VITE_API_URL
时,TypeScript 就会提供类型检查和提示功能,避免拼写错误或类型错误。
七 .env文件的运行模式
在 Vite 项目中,.env
文件的后缀(如 .env.development
和 .env.production
)通过 运行模式 (mode
) 来生效。Vite 根据不同的运行模式,自动加载相应的环境文件。这一过程可以通过以下几个方面来理解。
1. 运行模式(Mode)
Vite 提供了不同的 运行模式,如 development
、production
和自定义模式。运行模式影响了环境变量的加载方式,以及构建时的配置差异。
- development 模式:用于本地开发,通常启用热模块替换(HMR)等功能。
- production 模式:用于生产环境,通常会启用代码压缩、Tree-shaking 等优化。
当你启动 Vite 时,Vite 会根据运行模式选择性加载不同的 .env
文件:
- 如果是
development
模式,Vite 会加载.env.development
文件。 - 如果是
production
模式,Vite 会加载.env.production
文件。 .env
文件是通用文件,不论什么模式都会加载。
2. 文件加载顺序
Vite 会按照以下顺序依次加载环境文件,且后面的文件会覆盖前面文件中定义的同名变量:
.env
:通用环境变量,适用于所有模式。.env.local
:通用的本地环境变量,不会上传到版本控制。.env.[mode]
:特定模式的环境变量,例如.env.development
或.env.production
。.env.[mode].local
:特定模式的本地环境变量,不会上传到版本控制。
例如,在 development
模式下,Vite 的加载顺序如下:
.env
.env.local
.env.development
.env.development.local
在 production
模式下,加载顺序为:
.env
.env.local
.env.production
.env.production.local
3. 如何指定运行模式
默认情况下,Vite 在开发环境中运行 development
模式,在构建时运行 production
模式。不过,你也可以通过命令行参数显式指定模式。
例如,使用 vite
启动开发服务器时,默认运行 development
模式:
npm run dev
但你也可以通过 --mode
参数指定运行模式:
# 使用 production 模式启动开发服务器
npm run dev -- --mode production
同样地,在构建项目时,默认是 production
模式,但你也可以指定其他模式:
# 以 staging 模式构建
npm run build -- --mode staging
通过指定 --mode
参数,Vite 会根据所提供的模式来加载对应的 .env.[mode]
文件。
4. 自定义模式
除了 development
和 production
模式,你还可以根据项目需求创建自定义模式。
假设你要为 staging
(预发布)环境配置变量,可以创建一个 .env.staging
文件,然后在构建命令中指定 staging
模式:
# .env.staging 文件中的变量
VITE_API_URL=https://staging.api.example.com
VITE_APP_TITLE=MyVueApp (Staging)
构建命令:
npm run build -- --mode staging
当你运行这个命令时,Vite 会加载 .env.staging
和 .env.staging.local
文件中的环境变量。
5. 环境变量覆盖
同一环境下的多个 .env
文件中如果定义了同名变量,加载顺序较后的文件中的值会覆盖较前的文件中的值。这为我们提供了灵活性,可以通过 .env.local
或 .env.[mode].local
文件来覆盖默认的设置,而不需要修改公共的 .env
文件。这在团队协作中尤为有用,.local
文件可以包含敏感信息或个人的开发配置,并且可以被 .gitignore
忽略,不会被提交到版本控制系统中。
6. 运行模式汇总说明
.env
文件后缀根据 Vite 的 运行模式(mode
)生效,如development
、production
等。- 通过
.env.[mode]
文件可以为特定模式定义环境变量,Vite 会根据当前模式自动加载对应的.env
文件。 - 加载顺序为
.env
→.env.local
→.env.[mode]
→.env.[mode].local
,后者会覆盖前者的同名变量。 - 可以通过命令行的
--mode
参数指定自定义模式,以便加载自定义的环境配置文件。
七、总结
在 Vue 3、Vite 和 TypeScript 项目中使用环境变量可以极大地提高应用的灵活性和可维护性。通过创建 .env
文件,并使用 import.meta.env
来访问和管理环境变量,可以轻松地根据不同的环境配置不同的项目行为。记得在项目中使用 TypeScript 类型声明为环境变量提供类型提示,这样可以进一步提升开发体验。
参考链接
- Vite 官方文档:https://vitejs.dev/guide/env-and-mode.html
- Vue 3 官方文档:https://vuejs.org/
- TypeScript 官方文档:https://www.typescriptlang.org/docs/
相关文章:

使用 Vue 3、Vite 和 TypeScript 的环境变量配置
使用 Vue 3、Vite 和 TypeScript 的环境变量配置 在开发现代前端应用时,环境变量是一个非常重要的概念。它可以帮助我们根据不同的环境(开发、测试、生产)配置不同的行为,比如 API 请求地址、调试选项等。在 Vue 3、Vite 和 Type…...

F28335 的串行外设接口(以下简称 SPI)
1 SPI 介绍 1.1 SPI 简介 1.2 F28335 的 SPI模块介绍 (1)F28335 的 SPI 特点...

科技引领未来生活——“光影漫游者”展览馆应用—轻空间
随着科技的快速发展,展览馆作为展示文化、科技和艺术的场所,正逐渐从传统的静态展示向高科技互动体验转变。由轻空间打造的“光影漫游者”展览馆,凭借其前沿的气承式结构和智能化系统,将参观者带入了一个未来感十足、充满科技魅力…...
ego-planner开源代码之启动参数介绍分析
ego-planner开源代码之启动参数介绍&分析 1. 源由2. 逻辑分析3. 启动参数section 1 三维地图尺寸section 2 里程计话题映射section 3 advanced_param.xml配置section 3.1section 3.2section 3.3section 3.4section 3.5section 3.6section 3.7section 3.8 section 4 轨迹服务…...
828 华为云征文|华为 Flexus 云服务器打造 Laverna 在线笔记应用
一、引言 在当今数字化时代,高效的笔记管理工具对于学习、工作和生活都至关重要。Laverna 作为一款功能强大的开源在线笔记应用,提供了 Markdown 编辑、加密支持等特性,是替代 Evernote 的绝佳选择。在 2024 年 9 月 14 日这个充满创新的日子…...
数据结构与算法-Trie树添加与搜索
trie树的使用场景 我们若需要制作一个通讯录的软件,使用常规树结构查询的复杂度为O(logn),但trie树的复杂度确与数据多少无关,与单词长度有关,这就大大缩减的查询的时间复杂度。 trie树的基本实现 基础结构 package com.study.trieDemo;i…...

AIGC专栏15——CogVideoX-Fun详解 支持图文生视频 拓展CogVideoX到256~1024任意分辨率生成
AIGC专栏15——CogVideoX-Fun详解 支持图&文生视频 拓展CogVideoX到256~1024任意分辨率生成 学习前言项目特点生成效果相关地址汇总源码下载地址 CogVideoX-Fun详解技术储备Diffusion Transformer (DiT)Stable Diffusion 3EasyAnimate-I2V 算法细节算法组成InPa…...

BFS 解决多源最短路问题
文章目录 多源BFS542. 01 矩阵题目解析算法原理代码实现 1020. 飞地的数量题目解析算法原理 1765. 地图中的最高点题目解析算法原理代码实现 1162. 地图分析题目解析算法原理代码实现 多源BFS 单源最短路: 一个起点、一个终点 多源最短路: 可以多个起点…...

论文笔记:交替单模态适应的多模态表征学习
整理了CVPR2024 Multimodal Representation Learning by Alternating Unimodal Adaptation)论文的阅读笔记 背景MLA框架实验Q1 与之前的方法相比,MLA能否克服模态懒惰并提高多模态学习性能?Q2 MLA在面临模式缺失的挑战时表现如何?Q3 所有模块是否可以有…...

鸿蒙OS 线程间通信
鸿蒙OS 线程间通信概述 在开发过程中,开发者经常需要在当前线程中处理下载任务等较为耗时的操作,但是又不希望当前的线程受到阻塞。此时,就可以使用 EventHandler 机制。EventHandler 是 HarmonyOS 用于处理线程间通信的一种机制,…...
执行 npm报错 Cannot find module ‘../lib/cli.js‘
报错 /usr/local/node/node-v18.20.4-linux-x64/bin/npm node:internal/modules/cjs/loader:1143 throw err; ^ Error: Cannot find module ../lib/cli.js Require stack: - /usr/local/node/node-v18.20.4-linux-x64/bin/npm at Module._resolveFilename (node:inter…...

基于SpringBoot+Vue+MySQL的国产动漫网站
系统展示 用户前台界面 管理员后台界面 系统背景 随着国内动漫产业的蓬勃发展和互联网技术的快速进步,动漫爱好者们对高质量、个性化的国产动漫内容需求日益增长。然而,市场上现有的动漫平台大多以国外动漫为主,对国产动漫的推广和展示存在不…...
AUTOSAR汽车电子嵌入式编程精讲300篇-基于CAN总线的气动控制
目录 前言 知识储备 什么是气动控制: 气动控制基础知识 一、气动元件 二、气路设计 三、气动控制系统 气动控制系统构成图 气动控制系统基本组成功能图 几种常见的气动执行元件实物图 常用气动压力控制阀实物图 常用气动流动控制阀实物图 电磁控制换向发实物图 部…...

Ubuntu 20.04 内核升级后网络丢失问题的解决过程
在 Ubuntu 系统中,内核升级是一个常见的操作,旨在提升系统性能、安全性和兼容性。然而,有时这一操作可能会带来一些意外的副作用,比如导致网络功能的丧失。 本人本来是想更新 Nvidia 显卡的驱动,使用 ubuntu-drivers …...

论文解读《LaMP: When Large Language Models Meet Personalization》
引言:因为导师喊我围绕 “大语言模型的个性化、风格化生成” 展开研究,所以我就找相关论文,最后通过 ACL 官网找到这篇,感觉还不错,就开始解读吧! “说是解读,其实大部分都是翻译哈哈哈&#x…...

Excel VLOOKUP函数怎么用?vlookup函数的使用方法及案例
大家好,这里是效率办公指南! 🔎 在Excel的世界里,VLOOKUP函数无疑是查询和数据分析中的明星。无论是从庞大的数据表中提取特定信息,还是进行数据的快速匹配,VLOOKUP都能大显身手。今天,我们将深…...

专为汽车功能应用打造的 MLX90376GGO、MLX90377GGO、MLX90377GDC-ADB-280 Triaxis®磁位置传感器 IC
一、MLX90376 Triaxis堆叠式高性能位置传感器芯片(模拟/PWM/SENT/SPC) MLX90376GGO-ABA-600 MLX90376GGO-ABA-630 MLX90376GGO-ABA-680 MLX90376是一款磁性绝对位置传感器芯片,适用于要求具备抗杂散磁场干扰性能的360旋转汽车应用。它提供…...

34.贪心算法1
0.贪心算法 1.柠檬水找零(easy) . - 力扣(LeetCode) 题目解析 算法原理 代码 class Solution {public boolean lemonadeChange(int[] bills) {int five 0, ten 0;for (int x : bills) {if (x 5) // 5 元:直接收下…...

DataX实战:从MongoDB到MySQL的数据迁移--修改源码并测试打包
在现代数据驱动的业务环境中,数据迁移和集成是常见的需求。DataX,作为阿里云开源的数据集成工具,提供了强大的数据同步能力,支持多种数据源和目标端。本文将介绍如何使用DataX将数据从MongoDB迁移到MySQL。 环境准备 安装MongoDB…...

Axure设计之表格列冻结(动态面板+中继器)
在Web端产品设计中,复杂的表格展示是常见需求,尤其当表格包含大量列时,如何在有限的屏幕空间内优雅地展示所有信息成为了一个挑战。用户通常需要滚动查看隐藏列,但关键信息列(如ID、操作按钮等)在滚动时保持…...

WPF DataGrid 动态修改某一个单元格的样式
WPF DataGrid 动态修改某一个单元格的样式 <DataGrid Name"main_datagrid_display" Width"1267" Height"193" Grid.Column"1"ItemsSource"{Binding DataGridModels}"><DataGrid.Columns><!--ElementStyle 设…...
如何安装部署kafka
安装和部署Apache Kafka需要以下几个步骤,包括下载 Kafka、配置 ZooKeeper(或者使用 Kafka 自带的 Kafka Raft 模式替代 ZooKeeper),以及启动 Kafka 服务。以下是一个但基于 Linux 的典型安装流程,可以根据需要改装到其…...

Centos7-rpm包管理器方式安装MySQL 5.7.25
前言 本文用于学习通过Mysql压缩包在centos7中安装和配置的过程以及过程中碰到的Bug解决。 Mysql安装包下载和上传 MySQL :: Download MySQL Community Server (Archived Versions)https://downloads.mysql.com/archives/community/访问Mysql官方下载站,选择对应的…...
Project Online 协作版部署方案
目录 前言 第一部分:为什么选择Project Online? 一、核心优势 二、适用场景 第二部分:部署前的准备工作 一、需求分析 二、账户和权限管理 三、培训与支持 第三部分:Project Online 的核心功能 一、项目创建与管理 二、资源管理 三、团队协作 四、风险管理 五…...

小米 13 Ultra机型工程固件 资源预览与刷写说明 步骤解析
小米 13 Ultra机型---机型代码为ishtar 。工程固件可以辅助修复格机或者全檫除分区后的基带修复。可以用于修复TEE损坏。以及一些分区的底层修复。此款固件也可以为更换UFS后的底包。 通过博文了解 1💝💝💝-----此机型工程固件的资源刷写注意事项 2💝💝💝-----此…...
Goweb预防XSS攻击
XSS攻击示例 假设您有一个简单的Web应用程序,其中包含一个用户输入表单,用户可以在其中输入他们的名字,然后这个名字会被显示在页面上。攻击者可以在表单中输入恶意的JavaScript代码,如,如果应用程序没有对这个输入进…...
ICM20948 DMP代码详解(36)
接前一篇文章:ICM20948 DMP代码详解(35) 上一回讲到了icm20948_sensor_setup() ---> inv_icm20948_initialize_auxiliary函数 ---> inv_icm20948_set_slave_compass_id函数,本回开始,就对于inv_icm20948_set_sla…...
【框架】Spring、SpringBoot和SpringCloud区别
Spring Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架) IoC(Inversion of Control,控制反转)是一种设计思想,它主要用于降低软件系统中不同模块之间的耦合度,提高代码的可维护…...
计算机网络各层有哪些协议?
计算机网络的各层协议知识总结 一、物理层 没有涉及到比较重要的协议,但是有一个比较重要的技术----非对称数字用户线(ADSL) 二、数据链路层 1、点对点协议(PPP----point to point protocol,用户计算机与ISP进行通信…...

Diffusion Model Stable Diffusion(笔记)
参考资料: 文章目录 DDPM架构模型如何拥有产生逼真图片的能力Denoise模型功能Denoise模型如何训练考虑进文字 文生图流程(Stable Diffusion) DDPM架构 模型如何拥有产生逼真图片的能力 Denoise模型功能 通过Denoise将一个噪音图一步步生成为目标图像 Denoise实际…...