Vue 服務端渲染 Nuxt 使用詳解

Nuxt 是基于 Vue 的高層框架,專注于服務器端渲染應用開發。它封裝了繁瑣的配置和通用模式,提供了開箱即用的 SSR 功能,使開發者能夠專注于編寫業務邏輯。

1.?Nuxt?的核心特性

  • SSR 支持:默認支持服務端渲染,提高應用性能和 SEO。

  • 路由自動生成(約定式路由):基于文件系統的路由生成,無需手動配置。

  • 異步數據獲取:提供 asyncData 和 fetch 方法,方便獲取數據。

  • 模塊系統:豐富的模塊生態,支持插件擴展功能。

  • 開發體驗:內置熱重載、錯誤處理等,提升開發效率。

2.?安裝和創建 Nuxt?項目

使用命令行工具快速創建 Nuxt 項目:

pnpm dlx nuxi@latest init my-nuxt-app

按照提示選擇項目配置,如包管理器、UI 框架、服務器框架等。

3.?項目結構解析

  • assets/:未編譯的靜態資源,如樣式、圖片等。

  • components/:Vue 組件,可在頁面和布局中復用。

  • layouts/:布局組件,定義頁面的整體結構。

  • pages/:頁面組件,Nuxt? 根據此目錄生成路由。

  • plugins/:插件目錄,用于擴展 Vue 功能。

  • static/:靜態文件,直接映射到應用的根路徑。

  • store/:Pinia 狀態管理目錄。

4.?路由與頁面

Nuxt?基于 pages/ 目錄自動生成路由:

  • 基本路由:pages/index.vue 對應 / 路徑。

  • 嵌套路由:在 pages 下創建文件夾,嵌套的 .vue 文件對應嵌套路由。

  • 動態路由:使用下劃線 _ 定義動態參數,如 pages/user/_id.vue 對應 /user/:id 。

pages/
├── index.vue      // /
├── about.vue      // /about
├── user/
│   ├── index.vue  // /user
│   └── _id.vue    // /user/:id

5.?組件與布局

  • 組件(Components):可復用的 Vue 組件,放在 components/ 目錄。

  • 布局(Layouts):定義頁面的基礎結構,如導航欄、頁腳等,默認布局為 layouts/default.vue。

在頁面中指定布局:

<template><div><!-- 頁面內容 --></div>
</template><script>
export default {layout: 'custom' // 引用 layouts/custom.vue 作為布局
}
</script>

6.?數據獲取

6.1.?asyncData 方法

  • 在組件(頁面)渲染之前調用。

  • 接收上下文對象 context,可用于獲取參數、請求數據等。

  • 返回的數據將合并到組件的 data 中。

<template><div><h1>{{ post.title }}</h1><p>{{ post.content }}</p></div>
</template><script>
export default {async asyncData({ params }) {const { id } = paramsconst post = await fetchPostById(id)return { post }}
}
</script>

6.2.?fetch 方法(Nuxt 2.12+)

  • 在組件實例化之后調用。

  • 可以訪問組件實例 this,但不返回數據。

  • 適用于需要在組件中使用 this 的場景。

7.?中間件和插件

7.1.?中間件

  • 在頁面或路由渲染之前執行的函數。

  • 用于權限校驗、日志記錄等。

  • 創建在 middleware/ 目錄下。

// middleware/auth.js
export default function ({ store, redirect }) {if (!store.state.authenticated) {return redirect('/login')}
}

在頁面中使用:

export default {middleware: 'auth'
}

7.2.?插件

  • 擴展 Vue 的功能,如引入第三方庫。

  • 創建在 plugins/ 目錄下。

  • 在 nuxt.config.js 中注冊。

// plugins/axios.js
import axios from 'axios'export default ({ app }, inject) => {const api = axios.create({baseURL: 'https://api.example.com'})inject('api', api)
}

在組件中使用:

export default {asyncData({ $api }) {return $api.get('/posts').then(res => {return { posts: res.data }})}
}

8.?動態路由和嵌套路由

8.1.?動態路由參數

  • 使用下劃線定義動態參數。

  • 可通過 context.params 獲取參數值。

8.2.?嵌套路由

  • 使用 pages/ 下的目錄結構定義嵌套路由。

  • 在父組件中添加 <nuxt-child /> 渲染子路由。

pages/
├── user/
│   ├── _id.vue      // /user/:id
│   ├── _id/
│   │   ├── profile.vue  // /user/:id/profile
│   │   └── settings.vue // /user/:id/settings

在 _id.vue中:

<template><div><h1>User {{ $route.params.id }}</h1><nuxt-child /></div>
</template>

9.?SEO 優化

  • 站點地圖(Sitemap):使用 @nuxtjs/sitemap 模塊自動生成。

  • 結構化數據:在頁面中添加結構化數據,提升搜索引擎理解。

  • Meta 標簽管理:使用 head 方法定義頁面的標題和 meta 信息。

export default {head() {return {title: this.post.title,meta: [{ hid: 'description', name: 'description', content: this.post.description }]}}
}

10.?部署 Nuxt 應用

10.1. 服務器渲染模式部署

  • 需要一個 Node.js 服務器運行 Nuxt.js 應用。

  • 構建和啟動:

npm run build
npm run start

10.2.?靜態站點生成(SSG)

  • 生成靜態的 HTML 文件,部署到靜態服務器。

  • 適用于內容不經常變化的站點。

npm run generate

11.?性能優化

  • 代碼拆分:利用 webpack 的代碼拆分功能,按需加載組件。

  • 緩存:使用緩存策略,緩存頁面和 API 請求。

  • 異步組件:使用異步組件加載,減少初始包大小。

  • 圖片優化:使用合適的圖片格式和尺寸,減少加載時間。

12.?模塊系統和擴展

Nuxt 支持模塊化,可以通過模塊擴展功能:

  • 官方模塊:如 Axios 模塊、PWA 模塊、Auth 模塊等。

  • 社區模塊:豐富的社區模塊可供使用。

安裝和使用模塊:

npm install @nuxtjs/axios

在 nuxt.config.js 中:

export default {modules: ['@nuxtjs/axios'],axios: {// Axios 模塊配置}
}

13.?Nuxt 的工作流程

Nuxt 在開發和運行時的工作流程主要包括:

13.1.?編譯階段

  • 路由生成:掃描 pages/、server/ 目錄,生成路由配置。

  • 模板編譯:將 Vue 組件模板編譯為渲染函數。

  • 打包:使用 webpack 打包生成服務器端和客戶端的代碼。

13.2. 運行階段

  • 服務器渲染:接收請求,執行對應的頁面組件,生成 HTML。

  • 客戶端激活:在瀏覽器端,Vue.js 接管頁面,激活組件的交互功能。

14.?服務端渲染流程詳解

1. 請求接收:服務器接收到客戶端請求。

2. 路由匹配:根據請求的 URL,匹配對應的頁面組件。

3. 數據預取:

  • 執行頁面組件的 asyncData 或 fetch 方法,獲取數據。

  • 數據獲取可以是異步的,如調用 API 接口。

4. 渲染頁面:

  • 將組件渲染為 HTML 字符串。

  • 包含初始的狀態數據。

5. 響應返回:將生成的 HTML 返回給客戶端。

15.?客戶端激活

  • 客戶端接收到 HTML 后,加載 JavaScript 文件。

  • Vue.js 接管頁面,將靜態的 HTML 轉換為可交互的 DOM。

  • 過程中會對比服務端和客戶端的虛擬 DOM,確保一致性。

16.?熱重載與開發體驗

16.1. 熱重載(HMR)

  • 在開發環境中,修改代碼后,頁面自動更新,無需手動刷新。

  • 提高開發效率。

16.2. 錯誤處理

  • 友好的錯誤提示,便于調試和定位問題。

17.?參考資料

  • Vue.js 官方文檔:https://cn.vuejs.org/

  • Nuxt.js 官方文檔:Nuxt: The Progressive Web Framework

  • Vue.js 社區:https://forum.vuejs.org/

  • SEO 標簽優化:https://seosetsups.com/blog/open-graph/

  • prerender:https://github.com/prerender/prerender

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/91899.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/91899.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/91899.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用ACK Serverless容器化部署大語言模型FastChat

核心概念 阿里云ACK Serverless&#xff1a;是一種基于 Kubernetes 的無服務器容器服務。用戶無需管理底層節點和服務器&#xff0c;即可快速部署容器化應用&#xff0c;并根據實際使用的 CPU 和內存資源按需付費&#xff0c;只專注于應用本身而非基礎設施管理。 FastChat&…

最新Android Studio漢化教程--兼容插件包

[ ] 軟件版本&#xff1a;Android Studio Meerkat Feature Drop | 2024.3.2 Build #AI-243.25659.59.2432.13423653, built on April 30, 2025 Runtime version: 21.0.613368085-b895.109 amd64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. Toolkit: sun.awt.windows.WT…

Unity_數據持久化_IXmlSerializable接口

Unity數據持久化 三、XML數據持久化 3.5 IXmlSerializable接口 3.5.1 IXmlSerializable接口基礎概念 什么是IXmlSerializable接口&#xff1a; IXmlSerializable 是.NET框架提供的一個接口&#xff0c;允許類自定義XML序列化和反序列化的過程。當默認的XML序列化行為無法滿足需…

如何快速解決PDF解密新方法?

有時從網絡下載的PDF文檔會帶有加密限制&#xff0c;導致無法編輯、復制或打印。它的體積僅約10MB&#xff0c;無需安裝&#xff0c;解壓即用。遇到受限制的文件時&#xff0c;只需將其拖入界面&#xff0c;選擇是否覆蓋原文件&#xff0c;點擊執行&#xff0c;瞬間完成解密。「…

譯|數據驅動智慧供應鏈的構成要素與關聯思考

數據質量&#xff0c;通過識別關鍵決策和瓶頸構建信息供應鏈。該模型適用于優化庫存管理、自動化物流、預測需求、實現產品全生命周期追溯及應對突發風險。例如&#xff0c;通過AI機器人自動管理倉庫&#xff0c;或利用數字孿生模擬和優化全球采購網絡。 匯總來自三篇文章&…

OS21.【Linux】環境變量

目錄 1.與環境變量有關的實驗 A.對比命令和自制程序的運行 為什么.像ls、pwd這樣的命令運行是不需要加路徑? 執行自制程序而不加路徑的方法,看看PATH環境變量 方法1:將自制程序移動到系統的搜索路徑下 方法2:臨時修改PATH環境變量 B.查看系統中所有環境變量 解釋幾個常…

加密流量論文復現:《Detecting DNS over HTTPS based data exfiltration》(上)

本文將以我個人的理解去閱讀該篇流量加密論文&#xff0c;并在下一篇盡力對其中的實驗部分進行復現。話不多說&#xff0c;先從論文開始著手。 內容介紹 傳統的DNS(Domain Name System)協議是以明文傳輸的。DNS作為互聯網的基礎設施&#xff0c;最初設計時主要考慮的是功能和效…

Apache RocketMQ 中Message (消息)的核心概念

好的&#xff0c;我們來深入理解一下 Apache RocketMQ 中 Message (消息) 這個核心概念。這份文檔詳細闡述了消息的定義、在模型中的位置、內部屬性、約束和使用建議。 你可以將 Message 看作是 RocketMQ 系統中數據傳輸和處理的最小原子單位。它承載了業務數據&#xff0c;并附…

C 語言問題

1. C語言中 union 與 struct 的區別類型structunion內存分配機制編譯器為每個成員?獨立分配內存空間&#xff0c;總內存大小 所有成員大小之和&#xff08;考慮內存對齊&#xff09;所有成員?共享同一段內存空間&#xff0c;總內存大小 ?最大成員的大小?數據存儲特性1. 所…

[ LeetCode優選算法專題一雙指針-----盛最多的水]

1.題目鏈接 LeetCode盛最多的水 2.題目描述 3.題目解析 問題本質分析 "盛最多水的容器" 問題可以抽象為&#xff1a;在坐標軸上有 n 條垂直線段&#xff0c;第 i 條線段的兩個端點分別是 (i, 0) 和 (i, height [i])。找到兩條線段&#xff0c;使得它們與 x 軸共同…

舊筆記本電腦如何安裝飛牛OS

01引言隨著電子產品的更新換代&#xff0c;我們有很多的電子產品已經滿足不了現在的工作需求和日常娛樂了&#xff0c;比如&#xff1a;用了很久厚重筆記本電腦放在現在辦公也是有點吃力了&#xff0c;我們現在換新了舊的還不想放在那里吃灰&#xff0c;怎么辦呢&#xff1f;我…

某金服Java面試終極指南:25題完整解析與場景化方案

涵蓋分布式鎖、緩存、事務、高并發等金融系統核心考點&#xff0c;附解決方案與抗風險設計一、分布式鎖深度解決方案 1. Redis分布式鎖完整實現 // 原子加鎖 防死鎖 String uuid UUID.randomUUID().toString(); Boolean locked redisTemplate.opsForValue().setIfAbsent(&qu…

MATLAB 2025a的下載以及安裝,安裝X310的測試附加功能(附加安裝包)

首先將安裝包下載到本地中之后解壓該文件夾&#xff0c;打開文件發現有兩個文件&#xff0c;其中crach文件夾中是破解matlab所用到的文件。而另一個壓縮包就是需要安裝的文件&#xff0c;要先解壓在安裝。在安裝之前將網絡斷開&#xff0c;不然可能破解不成功&#xff0c;先進入…

Scala實用編程(附電子書資料)

概述 Scala 是一種多范式編程語言&#xff0c;結合了面向對象編程&#xff08;OOP&#xff09;和函數式編程&#xff08;FP&#xff09;的特性電子書資料&#xff1a;https://pan.quark.cn/s/88737d4a680d Scala 的核心特點多范式融合 既支持面向對象編程&#xff08;類、繼承、…

數據結構(8)雙向鏈表

目錄 一、概念與結構 二、雙向鏈表的實現 1、初始化 2、尾插 3、頭插 4、尾刪 5、頭刪 6、在指定位置之后插入結點 7、刪除指定位置的結點 三、完整參考代碼 一、概念與結構 這里的雙向鏈表是指帶頭的的雙向循環鏈表&#xff0c;這里的“帶頭”和之前所說的“頭結…

【DeepSeek-R1 】分詞系統架構解析

文章目錄 ??前言 ?? 1. SentencePiece Unigram 的核心原理 1.1 算法基礎框架 1.2 核心數學原理 1.3 與BPE/WordPiece的對比 ?? 2. DeepSeek-R1 分詞器實現細節 2.1 詞表結構設計 2.2 關鍵特性實現 ?? 3. 性能優化關鍵技術 3.1 加速策略對比 3.2 編碼過程偽代碼 ?? 4.…

Linux自主實現shell

以下是在Linux操作系統 centos7版本下實現的shell &#xff0c;該shell具備bash的基礎功能&#xff0c;無上下鍵輸入歷史命令功能&#xff0c;刪除字符或命令時按住Ctrl Back #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.…

vue+elementUI上傳圖片至七牛云組件封裝及循環使用

1.效果&#xff08;解決循環組件賦值問題&#xff09; 廢話不多說直接上代碼 2.下載七牛云依賴 npm install qiniu-js # 或者使用 yarn yarn add qiniu-js3.在vue組件中引入 import * as qiniu from qiniu-js4.在components文件夾下創建UploadImg1/uploadImg.vue組件 <templ…

2025年6月電子學會青少年軟件編程(C語言)等級考試試卷(一級)

答案和更多內容請查看網站&#xff1a;【試卷中心 -----> 電子學會 ----> C/C ----> 一級】 網站鏈接 青少年軟件編程歷年真題模擬題實時更新 一、編程題 第 1 題 希望如光 題目描述 在充滿挑戰的生活中&#xff0c;希望往往是支撐人們穿越黑暗的核心力量。這…

拒絕復雜,AI圖表制作簡單化

在信息爆炸的時代&#xff0c;數據可視化已成為傳遞信息的核心手段。無論是職場匯報中的業績分析&#xff0c;還是學術研究里的實驗數據呈現&#xff0c;一張清晰直觀的圖表往往能勝過千言萬語。而 AI 技術的介入&#xff0c;徹底改變了圖表制作的傳統模式 —— 它不僅讓零基礎…