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

使用 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 会返回当前的模式,可以是 developmentproduction,也可以是自定义的模式。

六、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 提供了不同的 运行模式,如 developmentproduction 和自定义模式。运行模式影响了环境变量的加载方式,以及构建时的配置差异。

  • development 模式:用于本地开发,通常启用热模块替换(HMR)等功能。
  • production 模式:用于生产环境,通常会启用代码压缩、Tree-shaking 等优化。

当你启动 Vite 时,Vite 会根据运行模式选择性加载不同的 .env 文件:

  • 如果是 development 模式,Vite 会加载 .env.development 文件。
  • 如果是 production 模式,Vite 会加载 .env.production 文件。
  • .env 文件是通用文件,不论什么模式都会加载。

2. 文件加载顺序

Vite 会按照以下顺序依次加载环境文件,且后面的文件会覆盖前面文件中定义的同名变量:

  1. .env:通用环境变量,适用于所有模式。
  2. .env.local:通用的本地环境变量,不会上传到版本控制。
  3. .env.[mode]:特定模式的环境变量,例如 .env.development.env.production
  4. .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. 自定义模式

除了 developmentproduction 模式,你还可以根据项目需求创建自定义模式。

假设你要为 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)生效,如 developmentproduction 等。
  • 通过 .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 的环境变量配置 在开发现代前端应用时&#xff0c;环境变量是一个非常重要的概念。它可以帮助我们根据不同的环境&#xff08;开发、测试、生产&#xff09;配置不同的行为&#xff0c;比如 API 请求地址、调试选项等。在 Vue 3、Vite 和 Type…...

F28335 的串行外设接口(以下简称 SPI)

1 SPI 介绍 1.1 SPI 简介 1.2 F28335 的 SPI模块介绍 (1)F28335 的 SPI 特点...

科技引领未来生活——“光影漫游者”展览馆应用—轻空间

随着科技的快速发展&#xff0c;展览馆作为展示文化、科技和艺术的场所&#xff0c;正逐渐从传统的静态展示向高科技互动体验转变。由轻空间打造的“光影漫游者”展览馆&#xff0c;凭借其前沿的气承式结构和智能化系统&#xff0c;将参观者带入了一个未来感十足、充满科技魅力…...

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 在线笔记应用

一、引言 在当今数字化时代&#xff0c;高效的笔记管理工具对于学习、工作和生活都至关重要。Laverna 作为一款功能强大的开源在线笔记应用&#xff0c;提供了 Markdown 编辑、加密支持等特性&#xff0c;是替代 Evernote 的绝佳选择。在 2024 年 9 月 14 日这个充满创新的日子…...

数据结构与算法-Trie树添加与搜索

trie树的使用场景 我们若需要制作一个通讯录的软件&#xff0c;使用常规树结构查询的复杂度为O(logn),但trie树的复杂度确与数据多少无关&#xff0c;与单词长度有关&#xff0c;这就大大缩减的查询的时间复杂度。 trie树的基本实现 基础结构 package com.study.trieDemo;i…...

AIGC专栏15——CogVideoX-Fun详解 支持图文生视频 拓展CogVideoX到256~1024任意分辨率生成

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

BFS 解决多源最短路问题

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

论文笔记:交替单模态适应的多模态表征学习

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

鸿蒙OS 线程间通信

鸿蒙OS 线程间通信概述 在开发过程中&#xff0c;开发者经常需要在当前线程中处理下载任务等较为耗时的操作&#xff0c;但是又不希望当前的线程受到阻塞。此时&#xff0c;就可以使用 EventHandler 机制。EventHandler 是 HarmonyOS 用于处理线程间通信的一种机制&#xff0c…...

执行 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的国产动漫网站

系统展示 用户前台界面 管理员后台界面 系统背景 随着国内动漫产业的蓬勃发展和互联网技术的快速进步&#xff0c;动漫爱好者们对高质量、个性化的国产动漫内容需求日益增长。然而&#xff0c;市场上现有的动漫平台大多以国外动漫为主&#xff0c;对国产动漫的推广和展示存在不…...

AUTOSAR汽车电子嵌入式编程精讲300篇-基于CAN总线的气动控制

目录 前言 知识储备 什么是气动控制: 气动控制基础知识 一、气动元件 二、气路设计 三、气动控制系统 气动控制系统构成图 气动控制系统基本组成功能图 几种常见的气动执行元件实物图 常用气动压力控制阀实物图 常用气动流动控制阀实物图 电磁控制换向发实物图 部…...

Ubuntu 20.04 内核升级后网络丢失问题的解决过程

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

论文解读《LaMP: When Large Language Models Meet Personalization》

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

Excel VLOOKUP函数怎么用?vlookup函数的使用方法及案例

大家好&#xff0c;这里是效率办公指南&#xff01; &#x1f50e; 在Excel的世界里&#xff0c;VLOOKUP函数无疑是查询和数据分析中的明星。无论是从庞大的数据表中提取特定信息&#xff0c;还是进行数据的快速匹配&#xff0c;VLOOKUP都能大显身手。今天&#xff0c;我们将深…...

专为汽车功能应用打造的 MLX90376GGO、MLX90377GGO、MLX90377GDC-ADB-280 Triaxis®磁位置传感器 IC

一、MLX90376 Triaxis堆叠式高性能位置传感器芯片&#xff08;模拟/PWM/SENT/SPC&#xff09; MLX90376GGO-ABA-600 MLX90376GGO-ABA-630 MLX90376GGO-ABA-680 MLX90376是一款磁性绝对位置传感器芯片&#xff0c;适用于要求具备抗杂散磁场干扰性能的360旋转汽车应用。它提供…...

34.贪心算法1

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

DataX实战:从MongoDB到MySQL的数据迁移--修改源码并测试打包

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

Axure设计之表格列冻结(动态面板+中继器)

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

OpenClaw技能安装失败全解析:从依赖冲突到网络问题的系统性解决方案

1. 项目概述&#xff1a;当技能“卡住”时&#xff0c;我们遇到了什么&#xff1f;最近在折腾OpenClaw这类开源AI助手平台时&#xff0c;不少朋友都踩进了同一个坑&#xff1a;从官方市场或者第三方渠道找到了心仪的技能&#xff08;Skill&#xff09;&#xff0c;点击“安装”…...

Kerberos身份认证原理与实战排错指南

1. 为什么今天还要花时间搞懂 Kerberos&#xff1f;——一个被低估的“老协议”正在悄悄支撑着你的日常你每天登录公司内网查邮件、访问财务系统提交报销、用 Jenkins 构建代码、甚至在 Windows 域环境中打开一台同事的共享文件夹……这些看似顺滑的操作背后&#xff0c;大概率…...

2026年HR招聘偏好白皮书:这5项附加技能出现频率暴涨

2026 年的招聘市场&#xff0c;正在从“看你会什么岗位技能”&#xff0c;转向“看你能不能把岗位做得更智能”。HR筛简历时&#xff0c;越来越关注候选人的AI应用能力、数据化思维和业务落地能力。人社部近年发布的新职业中&#xff0c;已经出现生成式人工智能系统应用员、人工…...

基于Arduino与应变片传感器的高精度厨房电子秤DIY全攻略

1. 项目概述&#xff1a;用Arduino打造一台高精度厨房电子秤作为一个喜欢在厨房里折腾的硬件爱好者&#xff0c;我经常遇到需要精确称量食材的场合。市面上的电子秤要么精度不够&#xff0c;要么价格不菲&#xff0c;要么功能单一。于是&#xff0c;我萌生了自己动手做一台的想…...

告别手写UI!用NXP GUI Guider拖拽设计LVGL界面,5分钟搞定音乐播放器Demo

嵌入式UI开发革命&#xff1a;5分钟用GUI Guider构建LVGL音乐播放器在嵌入式系统开发中&#xff0c;用户界面(UI)设计曾长期是工程师的痛点——既要考虑资源受限的硬件环境&#xff0c;又要实现流畅美观的交互体验。传统手动编写UI代码的方式不仅效率低下&#xff0c;调试过程更…...

内存占用3KB!极致瘦身释放MCU无限可能

极致小体积&#xff0c;给工业领域带来了无限的可能&#xff1a;更低硬件成本&#xff0c;更小芯片体积&#xff0c;更低功耗&#xff0c;更高可靠性&#xff0c;让每一颗小MCU都拥有大系统的完整能力。 https://www.bilibili.com/video/BV1eZLi6PEjc/?spm_id_from333.1387.ho…...

0.2毫秒快速启动的操作系统

在工业控制以及航空航天等核心场景&#xff0c;极速启动就是高可靠系统的生命线。0.2毫秒超快启动搭配硬件看门狗&#xff0c;让设备在掉电重启、异常恢复时瞬时归位&#xff0c;关键任务永不延误&#xff01; https://www.bilibili.com/video/BV11mLY6VERt/?spm_id_from333.1…...

在Hermes Agent项目中接入Taotoken作为自定义模型供应商

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在Hermes Agent项目中接入Taotoken作为自定义模型供应商 基础教程类&#xff0c;针对使用Hermes Agent框架的开发者&#xff0c;详…...

免费抓包工具选型指南:Wireshark、Fiddler、mitmproxy、Charles实战对比

1. 抓包工具不是“黑科技”&#xff0c;而是网络世界的显微镜很多人第一次听说“抓包”&#xff0c;脑子里立刻浮现出黑客电影里满屏滚动的绿色代码、键盘敲得噼啪作响、三秒破解银行防火墙的画面。其实完全不是这样——抓包&#xff08;Packet Capture&#xff09;本质上就是把…...

HarmonyOS 6学习:解决图片放大后无法移动至边缘的matrix4矩阵变换技巧

从"卡在中间"到"自由拖拽"&#xff1a;一次完整的图片缩放平移边界问题攻关在HarmonyOS 6应用开发中&#xff0c;我最近遇到了一个看似简单却让人头疼的图片查看器问题&#xff1a;用户双指放大图片后&#xff0c;想要拖动查看边缘细节&#xff0c;却发现图…...