Vite - 配置 - 自动修改 index.html 中的title

需求描述

在Vue3项目的开发过程中,我们为了能区分正式环境和测试环境,
通常会进行环境配置文件的区分,
例如,开发环境一个配置文件、生产环境一个配置文件。因此,我们就希望 在项目的index.html 的 title 标签中,能够根据配置文件中的配置显示不同的标题。
例如 : 开发环境下 展示的标题是 : 【开发环境标题】生产环境下 展示的标题是 :【正式环境标题】

实现思路

vue3 项目默认使用的是 vite 进行项目的构建和管理,
因此本文介绍 vite中的配置。核心 : 使用 vite-plugins-html 这个插件进行变量的配置,在html中使用变量即可。

插件安装

因为是只在开发时用到,所以只需要将依赖安装到开发时依赖中就行。
插件的引入方式 import { createHtmlPlugin } from 'vite-plugin-html'
插件变量的使用语法 : <%= 变量名 => ,这个语法是 ejs 模板语法,就这么写就行

$ npm install vite-plugins-html --save-dev

项目结构

此处的项目结构只展示了主要的内容

study-vite| -- environment| -- vite.base.config.js    # vite的通用配置文件,本案例中无特殊内容| -- vite.dev.config.js     # vite 的开发环境的配置文件 | -- vite.prod.config.js    # vite的生产环境的配置文件| -- index.html                 # 项目的入口页面,就是要修改这个的title| -- package.json               # 此文件重点看启动脚本| -- vite.config.js             # vite的主配置文件

文件内容

vite.base.config.js

无特殊配置 - 就是一个空的配置

/*** 基础环境配置,目前来讲还没有配置任何的内容*/import { defineConfig } from "vite"export default defineConfig({})

vite.dev.config.js

这个文件中引入了 vite-plugins-html 插件,进行了参数的配置

// 开发环境的配置,目前来讲还没有配置任何的内容
import { defineConfig } from "vite"// 可以动态处理html文件内容的
import { createHtmlPlugin } from 'vite-plugin-html'export default defineConfig({ plugins:[ // plugins 表示插件// 使用修改html 的插件createHtmlPlugin({inject:{data:{// 定义了一个title 变量,可以被html中进行引用title:"开发环境的标题",}}})]
})

vite.prod.config.js

这个文件中引入了 vite-plugins-html 插件,进行了参数的配置

// 生产环境的配置,目前来讲还没有配置任何的内容
import { defineConfig } from "vite"// 可以动态处理html文件内容的
import { createHtmlPlugin } from 'vite-plugin-html'export default defineConfig({ plugins:[ // plugins 表示插件// 使用修改html 的插件createHtmlPlugin({inject:{data:{// 定义了一个title 变量,可以被html中进行引用title:"正式环境的标题",}}})]
})

vite.config.js

主要是根据启动脚本的参数加载不通的配置文件
我感觉着这种写法还是非常的优雅的,哈哈哈


import { defineConfig } from "vite"
// 读取环境变量的
import { loadEnv } from "vite"// 引入三个环境配置文件
import ViteBaseConfig from "./environment/vite.base.config"
import ViteProdConfig from "./environment/vite.prod.config"
import ViteDevConfig from "./environment/vite.dev.config"// 策略模式做一个动态的配置
const envResolver = {"build":()=>{console.log("生产环境")// 解构的语法return ({...ViteBaseConfig,...ViteProdConfig})},"serve":()=>{console.log("开发环境")// 另一种写法return Object.assign({},ViteBaseConfig,ViteDevConfig)}
}// 根据 参数 command 的值,使用不同的环境配置文件
export default defineConfig(({command,mode})=>{// 根据不同的环境使用不同的配置文件,注意这个地方的写法,非常的奇特return envResolver[command]()
})

index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><!-- <title>Document</title> --><!-- 使用变脸,注意此处的语法! --><title><%= title %></title>
</head>
<body>展示vite对静态图片-svg 的支持<br><!--引入main.js  --><script type="module" src="./main.js" ></script></body>
</html>

package.json

摘取了主要的命令
npm run dev: 执行开发环境
npm run prod: 执行生产环境的打包

  "scripts": {"dev": "vite","prod": "vite build"},

运行测试

开发环境运行

$ npm run dev

在这里插入图片描述

生产环境打包

$ npm run prod

打包之后,我们可以看到输出的index.html中title已经直接被替换了,没有问题

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>正式环境的标题</title>
<script type="module" crossorigin src="/assets/index-5a650527.js"></script>
</head>
<body>
展示vite对静态图片-svg 的支持
<br>
</body>
</html>

在这里插入图片描述

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

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

相关文章

关于交换芯片调试 tx_delay rx_delay 的一点经验

按照官方的介绍,需要用示波器 测量数据和时钟 实质相位差在2ns 左右,但是由于时钟 125M ,数据方波需要的示波器带宽更高,所以普通示波器是没有办法的,测试变形很大,所以调试的方法如下: 1.根据官方手册,先在设备树里设置跟手册示例一样的,保证ping的时候可以ping通,…

element el-date-picker报错Prop being mutated:“placement“快速解决方式

报错信息 Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop’s value. Prop being mutated: “placement” 报错版本 element-ui 2.15.6 和 2.15…

单链表相关面试题--4.输入一个链表,输出该链表中倒数第k个结点

/* 解题思路&#xff1a; 快慢指针法 fast, slow, 首先让fast先走k步&#xff0c;然后fast,slow同时走&#xff0c;fast走到末尾时&#xff0c;slow走到倒数第k个节点。 */ class Solution { public:ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {struct Lis…

【windows 清理redis 缓存】

redis-cli.exe flushall flushdb

深度学习领域中的耦合与解耦

在阅读论文的时候应该会看到两个操作&#xff0c;一个是耦合&#xff0c;一个是解耦&#xff0c;经常搭配着出现的就是两个词语&#xff0c;耦合头&#xff08;Coupled head&#xff09;以及Decoupled head&#xff08;解耦合头&#xff09;&#xff0c;那为什么要耦合&#xf…

【docker】iptables实现NAT

iptables是一个Linux内核中的防火墙工具&#xff0c;可以被用来执行各种网络相关的任务&#xff0c;如过滤、NAT和端口转发等&#xff0c;可以监控、过滤和重定向网络流量。 iptables可以用于以下应用场景&#xff1a; 网络安全&#xff1a;iptables可以过滤网络流量&#xf…

Workplace Search 的演变:使用 Elasticsearch 搜索你的私人数据

作者&#xff1a;Dana Juratoni, Aditya Tripathi Workplace Search 功能将来将与 Elastic Search 合并。 这是你需要了解的内容。 生成式人工智能技术的最新进展为搜索带来了一系列可能性。 随着开发人员构建新的体验&#xff0c;用户正在采用新的搜索使用方式 —— 从用自然…

CSS滚动捕获 scroll-snap-align

CSS滚动捕获 scroll-snap-align 看到 align, 就条件反射想到对齐方式, 嗯猜对了. 不过要先看一下若干名词介绍 scroll-snap-align 指定了盒子的 snap position, 即盒子 snap area 和滚动容器的 snapport 的对齐方式. 这个属性是定义在滚动元素上, 而不是滚动容器上 语法 这个…

Java的三大特性-继承

【1】生活案例&#xff1a; ATM , 电线 【2】Java中封装的理解&#xff1a; 将某些东西进行隐藏&#xff0c;然后提供相应的方式进行获取。 我们程序设计追求“高内聚&#xff0c;低耦合”。 ➢高内聚:类的内部数据操作细节自己完成&#xff0c;不允许外部干涉; ➢低耦…

Python与ArcGIS系列(八)通过python执行地理处理工具

目录 0 简述1 脚本执行地理处理工具2 在地理处理工具间建立联系0 简述 arcgis包含数百种可以通过python脚本执行的地理处理工具,这样就通过python可以处理复杂的工作和批处理。本篇将介绍如何利用arcpy实现执行地理处理工具以及在地理处理工具间建立联系。 1 脚本执行地理处理…

《Fine-Grained Image Analysis with Deep Learning: A Survey》阅读笔记

论文标题 《Fine-Grained Image Analysis with Deep Learning: A Survey》 作者 魏秀参&#xff0c;南京理工大学 初读 摘要 与上篇综述相同&#xff1a; 细粒度图像分析&#xff08;FGIA&#xff09;的任务是分析从属类别的视觉对象。 细粒度性质引起的类间小变化和类内…

【C++11并发】thread 笔记

简介 进程和线程的区别 进程&#xff1a;一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间&#xff0c;一个进程可以有多个线程&#xff0c;比如在Windows系统中&#xff0c;一个运行的xx.exe就是一个进程。 线程&#xff1a;进程中的一个执行任务&#xff08…

Android MQTT开发之 Hivemq MQTT Client

使用一个开源库&#xff1a;hivemq-mqtt-client&#xff0c;这是Java生态的一个MQTT客户端框架&#xff0c;需要Java 8&#xff0c;Android上使用的话问题不大&#xff0c;需要一些额外的配置&#xff0c;下面列出了相关的配置&#xff0c;尤其是 packagingOptions&#xff0c;…

python之代理ip的配置与调试

目录 前言 一、代理IP的配置 二、代理IP的调试 2.1 使用curl命令测试代理IP 2.2 使用requests库调试代理IP 三、代理IP的获取 3.1 使用代理IP池 3.2 使用付费代理IP服务 总结 前言 代理IP是网络爬虫中常用的技术手段。通过使用代理服务器&#xff0c;可以实现对特定网…

某60区块链安全之不安全的随机数实战一

区块链安全 文章目录 区块链安全不安全的随机数实战一实验目的实验环境实验工具实验原理实验内容攻击过程分析合约源代码漏洞EXP利用 不安全的随机数实战一 实验目的 学会使用python3的web3模块 学会以太坊不安全的随机数漏洞分析及利用 实验环境 Ubuntu18.04操作机 实验工…

【Flink】核心概念:并行度与算子链

并行度&#xff08;Parallelism&#xff09; 当要处理的数据量非常大时&#xff0c;我们可以把一个算子操作&#xff0c;“复制”多份到多个节点&#xff0c;数据来了之后就可以到其中任意一个执行。这样一来&#xff0c;一个算子任务就被拆分成了多个并行的“子任务”&#x…

爱上C语言:操作符详解(下)

&#x1f680; 作者&#xff1a;阿辉不一般 &#x1f680; 你说呢&#xff1a;生活本来沉闷&#xff0c;但跑起来就有风 &#x1f680; 专栏&#xff1a;爱上C语言 &#x1f680;作图工具&#xff1a;draw.io(免费开源的作图网站) 如果觉得文章对你有帮助的话&#xff0c;还请…

STM32/N32G455国民科技芯片驱动DS1302时钟---笔记

这次来分享一下DS1302时钟IC&#xff0c;之前听说过这个IC&#xff0c;但是一直没搞过&#xff0c;用了半天时间就明白了原理和驱动&#xff0c;说明还是很简单的。 注&#xff1a;首先来区分一下DS1302和RTC时钟有什么不同&#xff0c;为什么不直接用RTC呢&#xff1f; RTC不…

计蒜客T1723 约瑟夫问题(C语言实现)

【题目描述】 传说约瑟夫当年活下来就是靠快速计算这个问题。n个人围成一圈&#xff0c;编号依次为1,2,3…n。从第一个人开始报数&#xff0c;数到m的人再出圈。以此类推&#xff0c;直到所有的人都出列。请输出依次出圈人的编号。 【输入格式】 两个整数n,m&#xff0c;均在[1…

[Vue 代码模板] Vue3 中使用 Tailwind CSS + NutUI 实现侧边工具栏切换主题

文章归档&#xff1a;https://www.yuque.com/u27599042/coding_star/vzkgy6gvcnpl3u2y 效果示例 配置 src 目录别名 https://www.yuque.com/u27599042/coding_star/ogu2bhefy1fvahfv 配置 Tailwind CSS https://www.yuque.com/u27599042/coding_star/yqzi9olphko9ity1 配置…