使用 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、操作按钮等)在滚动时保持…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
