Vue3+Vite MPA多頁面應用開發完整指南 – 從零搭建到部署優化

什么是 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…