什么是 MPA 多页面应用

MPA(Multi-Page Application)是由多个独立的 HTML 页面组成的应用,每个页面都有独立的入口文件。与 SPA 不同,MPA 的每个页面都是独立的,页面间通过链接跳转,适合大型项目或需要 SEO 优化的场景。

项目结构设计

vue3-vite-mpa/
├── src/
│   ├── pages/
│   │   ├── home/
│   │   │   ├── index.html
│   │   │   ├── main.js
│   │   │   └── App.vue
│   │   ├── about/
│   │   │   ├── index.html
│   │   │   ├── main.js
│   │   │   └── App.vue
│   │   └── admin/
│   │       ├── index.html
│   │       ├── main.js
│   │       └── App.vue
│   ├── components/
│   │   ├── Header.vue
│   │   └── Footer.vue
│   └── assets/
├── package.json
└── vite.config.js

基础配置

安装依赖

npm create vite@latest vue3-vite-mpa -- --template vue
cd vue3-vite-mpa
npm install vue-router@4 pinia

Vite 配置文件

// vite.config.js
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import { resolve } from "path";export default defineConfig({plugins: [vue()],build: {rollupOptions: {input: {home: resolve(__dirname, "src/pages/home/index.html"),about: resolve(__dirname, "src/pages/about/index.html"),admin: resolve(__dirname, "src/pages/admin/index.html"),},},},resolve: {alias: {"@": resolve(__dirname, "src"),},},
});

页面开发示例

首页 (Home)

<!-- src/pages/home/index.html -->
<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>首页 - Vue3 MPA</title></head><body><div id="app"></div><script type="module" src="./main.js"></script></body>
</html>
// src/pages/home/main.js
import { createApp } from "vue";
import { createPinia } from "pinia";
import App from "./App.vue";
import router from "@/router";const app = createApp(App);
const pinia = createPinia();app.use(pinia);
app.use(router);
app.mount("#app");
<!-- src/pages/home/App.vue -->
<template><div class="home"><Header /><main class="main-content"><h1>欢迎来到首页</h1><p>这是一个Vue3 + Vite多页面应用</p><div class="navigation"><router-link to="/about">关于我们</router-link><router-link to="/admin">管理后台</router-link></div></main><Footer /></div>
</template><script setup>
import Header from "@/components/Header.vue";
import Footer from "@/components/Footer.vue";
</script><style scoped>
.home {min-height: 100vh;display: flex;flex-direction: column;
}.main-content {flex: 1;padding: 2rem;text-align: center;
}.navigation a {margin: 0 1rem;padding: 0.5rem 1rem;background: #42b883;color: white;text-decoration: none;border-radius: 4px;
}
</style>

共享组件

Header 组件

<!-- src/components/Header.vue -->
<template><header class="header"><nav class="nav"><div class="logo"><a href="/">Vue3 MPA</a></div><ul class="nav-links"><li><a href="/">首页</a></li><li><a href="/about">关于</a></li><li><a href="/admin">管理</a></li></ul></nav></header>
</template><style scoped>
.header {background: #2c3e50;color: white;padding: 1rem 0;
}.nav {max-width: 1200px;margin: 0 auto;display: flex;justify-content: space-between;align-items: center;padding: 0 2rem;
}.logo a {color: white;text-decoration: none;font-size: 1.5rem;font-weight: bold;
}.nav-links {display: flex;list-style: none;gap: 2rem;
}.nav-links a {color: white;text-decoration: none;transition: color 0.3s;
}.nav-links a:hover {color: #42b883;
}
</style>

路由配置

// src/router/index.js
import { createRouter, createWebHistory } from "vue-router";const routes = [{path: "/",name: "Home",component: () => import("@/pages/home/App.vue"),},{path: "/about",name: "About",component: () => import("@/pages/about/App.vue"),},{path: "/admin",name: "Admin",component: () => import("@/pages/admin/App.vue"),},
];const router = createRouter({history: createWebHistory(),routes,
});export default router;

状态管理

// src/stores/user.js
import { defineStore } from "pinia";export const useUserStore = defineStore("user", {state: () => ({user: null,isLoggedIn: false,}),actions: {login(userData) {this.user = userData;this.isLoggedIn = true;},logout() {this.user = null;this.isLoggedIn = false;},},
});

构建和部署

# 开发模式
npm run dev# 生产构建
npm run build# 预览构建结果
npm run preview

性能优化

// vite.config.js 代码分割配置
export default defineConfig({build: {rollupOptions: {input: {home: resolve(__dirname, "src/pages/home/index.html"),about: resolve(__dirname, "src/pages/about/index.html"),admin: resolve(__dirname, "src/pages/admin/index.html"),},output: {manualChunks: {vendor: ["vue", "vue-router"],utils: ["@/utils/common.js"],},},},},
});

总结

Vue3+Vite MPA 多页面应用开发提供了灵活的项目架构,适合大型项目或需要 SEO 的场景。通过合理的项目结构设计、组件复用、路由管理和状态管理,可以构建出高性能、易维护的多页面应用。

关键要点:

  • 每个页面独立,便于开发和维护
  • 共享组件和工具函数,提高代码复用性
  • 使用 Vite 的构建优化,提升开发和生产性能
  • 合理的路由设计,提供良好的用户体验

 Vue3+Vite MPA多页面应用开发完整指南 - 从零搭建到部署优化 - 高质量源码分享平台-免费下载各类网站源码与模板及前沿技术分享

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

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

相关文章

【企业级架构】企业战略到技术落地的全流程【第一篇】

目录 一、人生蓝图与企业罗盘&#xff1a;战略视角下的成长架构 1. 大学毕业迷茫期 → 企业未制定战略前&#xff1a;无方向、无目标​ 2. 制定职业规划 → 企业战略制定&#xff1a;明确 “去哪” 和 “分几步走”​ 3. 盘点自身能力差距 → 业务架构梳理&#xff1a;搞清…

(二) Python + 地球信息科学与技术 = 经典案例分析

目录 四、农业精准施肥与产量预测&#xff08;植被指数 机器学习&#xff09; 五、公共场所踩踏事故预警系统&#xff08;时空大数据 Web 开发&#xff09; 六、森林火灾智能识别与救援路径规划&#xff08;遥感 路径优化&#xff09; 七、海岸线侵蚀动态监测与防护&…

从需求到部署全套方案:餐饮服务许可证数据可视化分析系统的大数据技术实战

&#x1f393; 作者&#xff1a;计算机毕设小月哥 | 软件开发专家 &#x1f5a5;️ 简介&#xff1a;8年计算机软件程序开发经验。精通Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等技术栈。 &#x1f6e0;️ 专业服务 &#x1f6e0;️ 需求定制化开发源码提…

Qt 关于QString和std::string数据截断的问题- 遇到\0或者0x00如何处理?

Qt 关于QString和std::string数据截断的问题- 遇到\0或者0x00如何处理&#xff1f;引言一、解决方案二、使用QByteArray注意事项引言 在Qt开发中&#xff0c;使用QString或std::string获取、发送字符串时&#xff0c;遇到\0(空字符)或者0x00(十六进制表示)可能导致数据截断&am…

Spring Cloud LoadBalancer 最佳实践

Ribbon 曾经是 Spring Cloud 家族默认的客户端负载均衡工具&#xff0c;而 Spring Cloud LoadBalancer (SCLB) 是官方替换 Ribbon 的新实现。表面上它们都解决 “服务调用时选哪个实例” 的问题&#xff0c;但在理念、架构和生态上差异不小。一、Ribbon vs SCLB1. 定位和生态…

【STM32】SPI 与 Flash 笔记

1️⃣ SPI&#xff08;Serial Peripheral Interface&#xff0c;串行外设接口&#xff09;英文解释&#xff1a; Serial&#xff1a;串行Peripheral&#xff1a;外设Interface&#xff1a;接口用途&#xff1a;MCU 与外部设备&#xff08;Flash、传感器等&#xff09;高速数据通…

抽象工厂设计模式 Abstract Factory

抽象工厂抽象工厂设计模式是一种创建模式&#xff0c;它提供了一个用于创建相关或从属对象族的接口&#xff0c;而无需指定其具体类。 它在以下情况下特别有用&#xff1a; 您需要创建必须一起使用并且是一致系列的一部分的对象&#xff08;例如&#xff0c;按钮、复选框和菜单…

WSL 下的虚拟网卡配置

第一部分&#xff1a;Windows 虚拟网卡创建指南 1. 原理 在 Windows 里&#xff0c;“虚拟网卡”本质是由网络驱动在系统网络栈中创建的一个 软件网卡接口。它的作用和物理网卡类似&#xff0c;只不过不直接连接到物理硬件&#xff0c;而是通过内核网络驱动与宿主机网络进行交换…

Dify web前端源码本地部署详细教程

目录 1. 先启动API 2. 启动worker服务 3. 启动web 4. 访问登陆地址 在前面的文章中&#xff0c;Dify源码部署&#xff0c;搭建二次开发环境&#xff08;一&#xff09; 已经记录了如何在本地启动API、work、中间件。在本篇文章中&#xff0c;将概述如何启动dify web源码项…

CVPR 2025|英伟达联合牛津大学提出面向3D医学成像的统一分割基础模型

在 2D 自然图像和视频的交互式分割领域&#xff0c;基础模型已引发广泛关注&#xff0c;这也促使人们开始构建用于医学成像的 3D 基础模型。然而&#xff0c;3D 医学成像存在的领域差异以及临床应用场景&#xff0c;要求开发一种有别于现有 2D 解决方案的专用模型。具体而言&am…

解决“Win7共享文件夹其他电脑网络无法发现共享电脑名称”的问题

要让运行 Windows 7 的电脑被局域网中其他设备&#xff08;包括另一台电脑、手机、NAS 等&#xff09;“发现”&#xff0c;必须同时满足三个条件&#xff1a; 网络发现功能已启用&#xff1b;对应的后台服务已启动&#xff1b;防火墙规则放行。 下面给出最简、最稳妥的 3 步设…

Python pyzmq 库详解:从入门到高性能分布式通信

一、前言 在现代软件开发中&#xff0c;进程间通信&#xff08;IPC&#xff09;与分布式系统通信已经成为基础能力。无论是构建一个微服务架构的后端&#xff0c;还是实现大规模并行计算任务&#xff0c;如何让不同的进程或节点之间高效地传递消息&#xff0c;都是核心问题。 传…

CentOS 7更换国内镜像源

第一步&#xff1a;检查系统版本 在修改任何配置之前&#xff0c;先确定你的 CentOS 版本&#xff0c;因为不同版本的镜像源配置文件不同。 cat /etc/redhat-release这个命令会显示你的 CentOS 版本信息&#xff0c;例如 CentOS Linux release 7.9.2009 (Core)。从你的错误日志…

详解 doclayout_yolo:Python 文档布局检测

目录一、doclayout_yolo 核心功能二、安装方法1. 直接安装2. 通过 PDF-Extract-Kit 安装三、使用示例1. 快速体验&#xff08;HuggingFace Demo&#xff09;2. 本地推理代码3. 批量处理四、技术亮点五、应用场景六、其他说明1.相关资源2. 注意事项doclayout_yolo 是一个基于 Y…

猫头虎AI分享|一款Coze、Dify类开源AI应用超级智能体Agent快速构建工具:FastbuildAI

猫头虎AI分享&#xff5c;一款 Coze、Dify 类开源 AI 应用超级智能体快速构建工具&#xff1a;FastbuildAI 区别在于它的易用度和商业闭环功能 摘要&#xff1a;FastbuildAI 是一个开源的 AI 应用“快速构建 商业化闭环”工具。它让个人开发者与小团队用 可视化 零代码 的方…

GitLab 安全漏洞 CVE-2025-6186 解决方案

本分分享极狐GitLab 补丁版本 18.2.2, 18.1.4, 18.0.6 的详细内容。这几个版本包含重要的缺陷和安全修复代码&#xff0c;我们强烈建议所有私有化部署用户应该立即升级到上述的某一个版本。对于极狐GitLab SaaS&#xff0c;技术团队已经进行了升级&#xff0c;无需用户采取任何…

【K8s】harbor安装与推送镜像

引言 在开发中&#xff0c;先推送镜像到docker&#xff0c;然后直接在docker运行。但是在K8S中&#xff0c;需要动态创建或者分配机器&#xff0c;这里需要将镜像推送到harbor仓库&#xff0c;然后再从仓库拉取到每台集群机器。 docker安装harbor&#xff1a;https://learnku…

FPGA读取AHT20温湿度模块思路及实现,包含遇到的问题(IIC协议)

一.阅读官方手册 手册在下方网址下载&#xff0c;该模块在各个网店平台均有销售 百度网盘 请输入提取码 手册重点关注IIC地址&#xff08;读地址0x71&#xff0c;写地址0x70&#xff09;、IIC命令和读写数据逻辑&#xff0c;手册写的比较简单&#xff08;感觉很多细节没到位…

项目会议怎么开才有效

要提高项目会议的有效性&#xff0c;需要做到以下几点&#xff1a;明确会议目的、制定具体的会议议程、合理控制会议时长、提前准备会议资料、选择合适的参会人员、设定清晰的会议目标、确保会议有决策和行动方案、会后及时跟进与落实。其中&#xff0c;明确会议目的尤为重要。…

计算机视觉第一课opencv(二)保姆级教

目录 简介 一、边界填充 1.函数说明 2.案例分析 二、图像运算 1.号运算 2.cv2.add()函数 3.图像加权运算 三、阈值处理 四、图像平滑处理 1.椒盐噪声 2.均值滤波&#xff08;Mean Filtering&#xff09; 3.方框滤波 4. 高斯滤波&#xff08;Gaussian Filtering&am…