【Vue3实践】(六)Vue3使用vite处理环境变量、打包部署、nginx配置

news2025/2/26 15:40:00

文章目录

  • 1.前言
  • 2.环境变量
    • 2.1.环境变量文件(.env)
    • 2.2.环境变量变量定义与使用
  • 3.打包部署
    • 3.1.nginx配置
    • 3.2.静态站点根路径配置
  • 4.总结

1.前言

由于在日常开发中会有一部分前端的开发任务,会涉及到Vue的项目的搭建、迭代、构建发布等操作,所以想系统的学习一下Vue相关的知识点,本专题会依照Vue的搭建、开发基础实践、进阶用法、打包部署的顺序进行记录。

历史文章链接如下:

《Vue3搭建、路由配置与基本语法》
《响应式变量、双向绑定、计算属性、监听器》
《优雅使用VUE3 组件特性:组件定义、组件注册、事件监听、双向绑定》
《优雅使用VUE3 组件特性:属性透传、依赖注入、组件插槽、动态组件》
《生命周期函数、组合式函数的使用》

本篇的主要内容包含:vite环境变量的作用及其使用方式及其打包打包部署。严格的说这些内容不完全属于Vue3的内容,但是我们在做Vue开发的时候,又无可避免的需要使用到它们,所以就放在Vue中进行梳理和学习了,《Vite文档地址》。

2.环境变量

顾名思义,环境变量就是在不同的环境中使用不同的变量值。可以通过.env文件来定义环境变量,再通过import.meta.env来使用定义的环境变量即可。

2.1.环境变量文件(.env)

.env指的是文件名而不是后缀名,它是一种放置在Vue根目录下的文件,它的特殊之处在于文件名的约定,我们在启动服务、构建项目时会根据文件的名称来进行匹配,常用的有两种形式: .env.env.[mode]

这里的[mode]是模式的意思,我们可以使用一些自定义的命名方式来命名定义模式,例如有4种不同的环境需要定义,分别是开发、测试、预发、生产,我们就可以定义4中模式

  • .env.development
  • .env.test
  • .env.stage
  • .env.production

其中 developmenproduction 是Vite中的两种默认的模式,当我们通过vite指令在本地启动服务时,会默认加载.env.development中的变量,而通过vite build进行打包时,会默认加载.env.produciton文件中的变量。

当前,也可以通过在指令后面加上--mode 模式名的方式来明确的指定一个环境变量文件进行加载,例如构建测试环境可以通过vite build --mode test来处理。

除此之外,我们在各个环境中的通用配置,可以直接写到以.env命名的文件中,.env文件中的变量在任何模式下都可以加载,但需要注意的是,.env文件下的变量优先级是低于.env.[mode]文件的,也就是说,如果有相同的变量,.env文件中的变量会被覆盖掉。

2.2.环境变量变量定义与使用

字段是直接写在.env文件中的,字段名VITE_xxx进行定义,只有以VITE为前缀的字段会暴露给客户端直接使用,例如在4个不同的文件中通过一个字段来定义当前的环境。

VITE_ENV=development
VITE_ENV=test
VITE_ENV=stage
VITE_ENV=production

定义好后,可以在服务中的任意一个.js文件中通过import.meta.env.变量名来使用,例如我在App.vue的js中输入了下面的代码。

<script setup>
	console.log(import.meta.env.VITE_ENV)
</script>

通过不同的模式进行打包后,进入首页就会在控制台中输出不同的字段值了。


注:环境变量经常会使用在axios上,在不同的环境中请求不同的服务端的路径。

3.打包部署

我们是通过 node+vite 进行的构建打包,所以需要在package.json中的scripts属性上编辑打包的指令,这里同样也是4个环境:

"scripts": {
    "dev": "vite",
    "test": "vite build --mode test",
    "stage": "vite build --mode stage",
    "build": "vite build",
},

上面我们已经提过了,vite指令与vite build指定是对应了默认值devolepmentproduction,所以此处只需要指定测试与预发环境的模式

配置完成之后,通过npm指令即可完成打包,例如打包生产环境:

npm run build

打包完成之后在项目的根目录中会生成一个dist文件夹,这里面就是用于部署站点的静态文件,我们一般会通过web服务器来代理这个文件夹,例如nginx
在这里插入图片描述

3.1.nginx配置

server {
    listen       80;
    server_name  www.huizhiyimo.cn;

	location /vue-demo {
		alias  D:/personal/vue-demo/dist/;
		index  index.html index.htm;
		try_files $uri $uri/ /vue-demo/index.html;
	}
}
  • location:配置url路径匹配关系,这里配置/vue-demo就是定义了一个标识,在有多个vue服务时,可以做区分
  • alias:指定静态文件目录的根路径
  • index:指令用于指定在请求的URL中未指定文件名时要使用的默认文件名
  • try_files:意思是优先根据浏览器输入的文件路径进行查找,如果找不到重定向到index.html文件

nginx配置完成之后,需要将www.huizhiyimo.cnhosts配置映射(因为没有这个实际的域名,需要我们自行配置本地dns映射):

127.0.0.1    www.huizhiyimo.cn

配置完成之后通过http://www.huizhiyimo.cn/vue-demo/访问Vue服务首页,此时会根据nginx中配置的路径,将请求转发到D:/personal/vue-demo/dist/路径,并查找路径下的index.html文件。

<html lang="en">
  <head>
    <meta charset="UTF-8">
    <link rel="icon" href="/favicon.ico">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vite App</title>
    <script type="module" crossorigin src="/assets/index-fc58d58f.js"></script>
    <link rel="stylesheet" href="/assets/index-89f47b86.css">
  </head>
  <body>
    <div id="app"></div>
  </body>
</html>

注意上面文件内容中的两个路径:/assets/index-fc58d58f.js/assets/index-89f47b86.css,此时访问者两个文件会通过域名http://www.huizhiyimo.cn/+这两个路径进行请求,如下图所示:
在这里插入图片描述
由于我们配置的的location是/vue-demo,所以此处将无法找到这两个静态文件。要解决这个问题有两个方式:

  1. 修改nginx配置,将location上的/vue-demo修改为/
  2. 在Vue服务中配置静态站点的根路径

第一个种方式在一个服务器中只部署一个服务时可以使用,例如通过docker来部署vue服务时,一个容器中只会有一个服务,没有其他服务的冲突就可以直接设置为/

第二种方式好处在于兼容性更强,更建议采用这种方式。

3.2.静态站点根路径配置

在Vue的根路径下,有一个vite.config.js的配置文件,打开这个文件后,可以加入以下的配置:

export default defineConfig({
  // 或者使用 base:'/vue-demo'
  base: './',
});

此处将 base 选项在不配置的时候默认是/,这就是为什么上面的请求中不会带有/vue-demo这个路径,所以我们可以配置为 base:'/vue-demo',这时候浏览器中后续所有的路由请求都会以/vue-demo作为前缀。

但是这种方式将路径写死了,我们在后续的迭代中如果想修改nginx上的路径/vue-demo时,还必须同步修改vite中的配置,比较容易出bug。

所以更好的方式是,直接设置为 base: './',意思是,所有的路由请求都会在相对于index.html的位置上发起,而此时的请求路径为http://www.huizhiyimo.cn/vue-demo/index.html,后续所有的请求都会以http://www.huizhiyimo.cn/vue-demo/为前缀,此时我们修改nginx的location配置后,就不需要再修改vite的配置了。

重新构建后,访问成功:
在这里插入图片描述

4.总结

本篇的主要内容是Vite中环境变量的使用以及打包部署,包含以下关键点:

  • 环境变量
    • 通过.env文件来划分环境,命名规则为.env.[mode]
    • vite指令的默认mode为developmentvite build的默认mode为production,可以根据这个默认值来命名
    • .env文件也可以不加mode,这样的文件在任何情况下都可以被引用,但是优先级低于有[mode]的文件
    • 如果想让客户端直接使用,.env文件中的变量名应该以VITE_作为前缀
    • 在项目的js文件中,可以通过import.meta.env.变量名使用环境变量
  • 打包部署
    • 通过vite build可以打包部署生产环境,如果想部署其他环境可以通过vite build --mode 模式名的方式进行打包,这里的模式名就是.env.[mode]中的mode值
    • 打包完成之后会在根目录下生成一个./dist目录,在这个目录下就是可以部署的静态站点
    • 静态站点可以通过web服务器进行代理,如nginx
    • 如果在nginx配置的location中包含了项目前缀,例如/vue-demo,则需要在Vue项目的vite.config.js中加入base:'./的配置

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

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

相关文章

Linux:主机USB设备驱动简析

文章目录1. 前言2. 分析背景3. USB 总线硬件拓扑4. USB 协议栈概览4.1 Linux USB 子系统概览4.2 USB外设(如U盘)固件基础5. Linux USB 子系统初始化6. Linux USB 主机控制器(HCD) 驱动6.1 USB 主机控制器驱动初始化6.2 USB 主机控制器设备对象注册和驱动加载7. Linux USB 设备驱…

Chatgpt接入Csdn:实现自动回复、评论、点赞

背景 起初&#xff0c;我只是想自己弄个工具&#xff0c;用来处理一下大佬们的三连支持&#xff0c;后面我发现大家都在讨论chatgpt&#xff0c;于是我将自动回复和评论消息接入到了Csdn中&#xff0c;不知道这篇文章能不能发出来&#xff0c;代码的话暂时不开源&#xff0c;后…

【从零开始】Docker Desktop:听说你小子要玩我

前言 &#x1f34a;缘由 捡起遗忘的Docker知识 由于本狗近期项目紧任务重&#xff0c;高强度的搬砖导致摸鱼时间下降。在上线项目时&#xff0c;看到运维大神一系列骚操作&#xff0c;dockerk8s的知识如过眼云烟&#xff0c;忘得干净的很。所以想重新恶补一下docker知识&…

深度学习中的卷积神经网络

博主简介 博主是一名大二学生&#xff0c;主攻人工智能研究。感谢让我们在CSDN相遇&#xff0c;博主致力于在这里分享关于人工智能&#xff0c;c&#xff0c;Python&#xff0c;爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主&#xff0c;博主会继续更新的&#xff0c…

OpenCV实战(17)——FAST特征点检测

OpenCV实战&#xff08;17&#xff09;——FAST特征点检测0. 前言1. FAST 特征点检测2. 自适应特征检测3. 完整代码小结系列链接0. 前言 Harris 算子根据两个垂直方向上的强度变化率给出了角点(或更一般地说&#xff0c;兴趣点)的数学定义。但使用这种定义需要计算图像导数&am…

Android 14 新 API:直接监听截屏操作,不用再观察媒体文件了~

截屏可以说是手机设备最常用的功能了&#xff0c;Android 系统非常重视截屏方面的体验&#xff0c;近几年的更新都不忘去优化这方面的体验。 从一开始仅在通知栏提醒已截屏&#xff0c;到 Android 11 支持在左下角生成截屏缩略图供编辑或分享&#xff0c;再到 Android 12 支持…

计算机图形学 | 变换与观察

计算机图形学 | 变换与观察计算机图形学 | 变换与观察6.1 神奇的齐次坐标回顾几何阶段几何变换平移比例旋转对称错切齐次坐标的引入齐次坐标的概念和相关问题基于齐次坐标的变换6.2 三维模型&#xff0c;动起来&#xff01;基本三维变换平移比例旋转对称错切整体比例变换逆变换…

《计算机网络——自顶向下方法》精炼——1.4到1.7

三更灯火五更鸡&#xff0c;努力学习永不止。无惧困难与挑战&#xff0c;砥砺前行向成功。 文章目录引言正文时延排队时延吞吐量协议层次&#xff0c;服务模型&#xff08;重点&#xff09;封装&#xff08;重点&#xff09;网络安全&#xff08;选看&#xff09;恶意软件的分类…

【数据分析与挖掘】数据预处理

目录概述一、数据清洗1.1 缺失值处理1.1.1 拉格朗日插值法1.1.2 牛顿插值法1.2 异常值处理二、数据集成2.1 实体识别2.2 冗余属性识别三、数据变换3.1 简单函数变换3.2 规范化3.3 连续属性离散化3.4 属性构造3.5 小波变换四、数据规约4.1 属性规约4.2 数值规约概述 数据挖掘过…

Spring Boot中使用Redis

目录 1.依赖 2.依赖关系 3.配置 4.RedisTemplate 5.基础操作 6.事务 1.依赖 maven依赖如下&#xff0c;需要说明的是&#xff0c;spring-boot-starter-data-redis里默认是使用lettuce作为redis客户端的驱动&#xff0c;但是lettuce其实用的比较少&#xff0c;我们常用的…

如何在 Web 实现支持虚拟背景的视频会议

前言 众所周知&#xff0c;市面上有比如飞书会议、腾讯会议等实现视频会议功能的应用&#xff0c;而且随着这几年大环境的影响&#xff0c;远程协作办公越来越成为常态&#xff0c;关于视频会议的应用也会越来越多&#xff0c;且在远程办公的沟通协作中对沟通软件的使用要求会…

ARMv8-A非对齐数据访问支持(Alignment support)

目录 1&#xff0c;对齐传输和非对齐传输 2&#xff0c;AArch32 Alignment support 2.1 Instruction alignment 指令对齐 2.2 Unaligned data access 非对齐数据访问 2.3 SCTLR.A Alignment check enable 3&#xff0c;AArch64 Alignment support 3.1 Instruction align…

Text to image论文精读GigaGAN: 生成对抗网络仍然是文本生成图像的可行选择

GigaGAN是Adobe和卡内基梅隆大学学者们提出的一种新的GAN架构&#xff0c;作者设计了一种新的GAN架构&#xff0c;推理速度、合成高分辨率、扩展性都极其有优势&#xff0c;其证明GAN仍然是文本生成图像的可行选择之一。 文章链接&#xff1a;https://arxiv.org/abs/2303.0551…

大数据周会-本周学习内容总结07

目录 01【hadoop】 1.1【编写集群分发脚本xsync】 1.2【集群部署规划】 1.3【Hadoop集群启停脚本】 02【HDFS】 2.1【HDFS的API操作】 03【MapReduce】 3.1【P077- WordCount案例】 3.2【P097-自定义分区案例】 历史总结 01【hadoop】 1.1【编写集群分发脚本xsync】…

【vue3】关于ref、toRef、toRefs那些事

&#x1f609;博主&#xff1a;初映CY的前说(前端领域) &#x1f4d2;本文核心&#xff1a;ref、toRef、toRefs的使用方法 【前言】我们在上一节的学习当中&#xff0c;使用了reactive()函数将vue3中的数据变成响应式的数据&#xff0c;本文中所讲的三个方法也能实现将数据转化…

安全防御之IPsec VPN篇

目录 1.什么是数据认证&#xff0c;有什么用&#xff0c;有哪些实现的技术手段&#xff1f; 2.什么是身份认证&#xff0c;有什么用&#xff0c;有哪些实现的技术手段&#xff1f; 3.什么是VPN技术&#xff1f; 4.VPN技术有哪些分类&#xff1f; 5.IPsec技术能够提供哪些安…

走进小程序【八】微信小程序中使用【Vant组件库】

文章目录&#x1f31f;前言&#x1f31f;Vant介绍&#x1f31f;Vant安装&#x1f31f;npm 支持&#x1f31f;使用Vant&#x1f31f;引入组件&#x1f31f;页面使用组件&#x1f31f;样式覆盖&#x1f31f;介绍&#x1f31f;解除样式隔离&#x1f31f;使用外部样式类&#x1f31…

基于冯洛伊曼拓扑的鲸鱼算法用于滚动轴承的故障诊断研究(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密…

【YOLO】YOLOv8实操:环境配置/自定义数据集准备/模型训练/预测

YOLOv8实操&#xff1a;环境配置/自定义数据集准备/模型训练/预测引言1 环境配置2 数据集准备3 模型训练4 模型预测引言 源码链接&#xff1a;https://github.com/ultralytics/ultralytics yolov8和yolov5是同一作者&#xff0c;相比yolov5&#xff0c;yolov8的集成性更好了&a…

C++面向对象丨1. 内存分区模型

Author&#xff1a;AXYZdong 硕士在读 工科男 有一点思考&#xff0c;有一点想法&#xff0c;有一点理性&#xff01; 定个小小目标&#xff0c;努力成为习惯&#xff01;在最美的年华遇见更好的自己&#xff01; CSDNAXYZdong&#xff0c;CSDN首发&#xff0c;AXYZdong原创 唯…