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

需求描述

复制代码
在Vue3项目的开发过程中,我们为了能区分正式环境和测试环境,
通常会进行环境配置文件的区分,
例如,开发环境一个配置文件、生产环境一个配置文件。

因此,我们就希望 在项目的index.html 的 title 标签中,能够根据配置文件中的配置显示不同的标题。
例如 : 开发环境下 展示的标题是 : 【开发环境标题】
       生产环境下 展示的标题是 :【正式环境标题】

实现思路

复制代码
vue3 项目默认使用的是 vite 进行项目的构建和管理,
因此本文介绍 vite中的配置。

核心 : 使用 vite-plugins-html 这个插件进行变量的配置,在html中使用变量即可。

插件安装

因为是只在开发时用到,所以只需要将依赖安装到开发时依赖中就行。

插件的引入方式 import { createHtmlPlugin } from 'vite-plugin-html'

插件变量的使用语法 : <%= 变量名 => ,这个语法是 ejs 模板语法,就这么写就行

shell 复制代码
$ 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

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

js 复制代码
/**
 * 基础环境配置,目前来讲还没有配置任何的内容
 */

import { defineConfig } from "vite"

export default defineConfig({

})

vite.dev.config.js

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

js 复制代码
// 开发环境的配置,目前来讲还没有配置任何的内容
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 插件,进行了参数的配置

js 复制代码
// 生产环境的配置,目前来讲还没有配置任何的内容
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

主要是根据启动脚本的参数加载不通的配置文件

我感觉着这种写法还是非常的优雅的,哈哈哈

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

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: 执行生产环境的打包

json 复制代码
  "scripts": {
    "dev": "vite",
    "prod": "vite build"
  },

运行测试

开发环境运行

shell 复制代码
$ npm run dev

生产环境打包

shell 复制代码
$ npm run prod

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

html 复制代码
<!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>
相关推荐
Access开发易登软件1 天前
Access 导入 Markdown 表格:把文档里的数据写进表
前端·html·vba·markdown·access开发
web打印社区1 天前
C-Lodop 提示未准备好或 WebSocket 没准备好:先让本机服务起来
javascript·网络·websocket·网络协议·pdf·html
cindershade1 天前
首屏不是 dist:用“加载账本”治理 Vite 的大包
性能优化·vite
COOLMO研究AI1 天前
企业官网服务页的信息架构怎么设计:从用户问题到语义化 HTML
前端·css·html
web打印社区2 天前
HTML5 静默打印:前端页面怎么调用打印机且尽量不弹窗
前端·javascript·vue.js·pdf·html·html5
web打印社区3 天前
政务办事大厅:叫号小票、办理回执网页怎么静默出纸
前端·javascript·vue.js·pdf·html·政务
陪我一起学编程3 天前
vue3笔记
前端·webpack·vue3·vite·脚手架·vue3笔记·组件式
IMPYLH4 天前
HTML 的 <title> 元素
前端·javascript·html
杨超越luckly4 天前
上海社零数据:消费结构分化——1.66万亿盘子从+7.2%到-1.0%的十五年观察
html·agent·数据可视化·上海·社会消费品零售总额
用户298698530145 天前
在 React 中使用 JavaScript 将 HTML 转换为 PDF
javascript·react.js·html