Nuxt.js服務端渲染入門

毛豆前端發表於2019-02-13

作者:太皇太后@毛豆前端

隨著Vue使用率的持續上長,越來越多的頁面都應用了瀏覽器渲染的方式,極大提升了前端的開發的質量和效率,但是也帶來了首屏渲染慢、SEO不友好及其他一些問題。 基於Vue的SSR構架Nuxt.js很好的解決了這個問題,頁面直出,前後端同構,不僅解決了首屏直出渲染、SEO等問題,在開發質量和效率也沒有任何損失。

一、Nuxt.js簡介

Nuxt.js是一個針對Vue的SSR框架,採用模組化的架構,簡單易用,效能好。Nuxt.js的開發者積極活躍,版本迭代迅速,於2018年1月9日釋出了v1.0.0正式版本。而且得到了Vue官網的大力推薦,接下來讓我們一起看看Nuxt.js的強大之處。

二、SSR模型建立

Nuxt.js 是一個基於vue.js的通用應用框架,其核心主要是通過vue-server-renderer模組來實現服務端渲染。 vue-server-renderer是Vue服務端Node.js渲染的一個模組,用來生成HTML內容。 使用步驟如下:

  1. npm install vue vue-server-renderer --save-dev
  2. 新建專案結構如下:

Nuxt.js服務端渲染入門

  1. 在server.js檔案中編寫程式碼:

Nuxt.js服務端渲染入門

  1. 在template.html編寫html,注意 <!—vue-ssr-outlet—> 這個必須寫,相當於佔位,服務端渲染的頁面內容填充到此。

Nuxt.js服務端渲染入門

  1. 執行命令node server.js啟動服務

  2. 瀏覽器開啟http://localhost:3100/,會看到data-server-rendered = “true”,表示是服務端渲染

Nuxt.js服務端渲染入門
那麼有了上面的例子,我們再看看如何使用Nuxt.js來實現服務端頁面渲染。

三、建立一個Nuxt.js專案

  1. 安裝

確保安裝了npx(npx在npm版本5.2.0預設安裝了)

  • npx create-nuxt-app <專案名>
  • npm install # or yarn
  • npm run dev

經過以上三個步驟,開啟瀏覽器,訪問localhost:3000,這跟建立一個Vue專案沒太多不同。專案目錄結構如下:

Nuxt.js服務端渲染入門
對於nuxt.js官網也給出了一個完整的伺服器請求到渲染的流程圖
Nuxt.js服務端渲染入門

  1. nuxt路由機制

pages目錄中的任何Vue元件都會基於他們的檔名稱和目錄結構自動新增到vue-router中。Nuxt可以生成對應的路由配置,在.nuxt/rouer.js可以體現出來,如圖:

Nuxt.js服務端渲染入門
巢狀路由:在pages下新增一個vue檔案,同時新增一個與該檔案同名的目錄用來存放子檢視元件

在父級vue檔案內增加用於顯示子檢視內容

為適應不同業務需求,還有動態路由,動態巢狀路由等功能 ,可以參照官網說明:zh.nuxtjs.org/guide/routi…

  1. assets和static靜態資源使用

assets包含未編譯的資源,與webpack如何載入和處理檔案有更多關係,與nuxt如何工作沒有太多關係。

static包含一些對映到你的站點的根目錄的靜態檔案。

比如:靜態資源放在assets下: < img src="~/assets/timg.jpeg"/>,如果靜態資源放在static下: < img src="timg.jpeg"/>

  1. layouts使用

在layouts目錄下建立一個新的佈局,即.vue檔案,程式碼如下

Nuxt.js服務端渲染入門
使用佈局時,可以在pages檔案下script裡設定layout值為佈局檔案的名字

export default {

 layout: 'admin-layout'

}
複製程式碼

注意:如果你輸入一個不正確的url,會顯示一個錯誤頁面。事實上,這個錯誤頁面是另外一種佈局。nuxt有它自己的錯誤頁面佈局,但是如果你想要編輯它,只需要建立一個error.vue佈局,然後nuxt就會使用這個佈局代替預設的佈局

  1. middleware使用

中介軟體(middleware)是允許你定義一個自定義函式(提供了一個context引數,可以獲取sever端和client端各種資訊)執行在一個頁面或佈局之前。比如我們在渲染頁面之前判斷許可權的攔截,或者根據使用者許可權跳轉到相應的路由等。 就本地開發環境時跳轉到指定路由為例,可這麼配置:

  • 首先我們需要在middleware資料夾中新增auth.js

Nuxt.js服務端渲染入門

Nuxt.js服務端渲染入門

  • 在nuxt.config.js檔案中配置

Nuxt.js服務端渲染入門

  • 在瀏覽器開啟localhost:3000/,此時會訪問到localhost:3000/dev

Nuxt.js服務端渲染入門
6. plugins

可以配置需要在vue應用例項化之前需要執行的js外掛,可以是你自己寫的庫或是第三方庫。比如:對於axios這種ajax請求外掛,element-ui第三方庫等。就element-ui為例,可以這麼配置:

  • 首先我們需要在plugins資料夾中新增外掛檔案element-ui.js

Nuxt.js服務端渲染入門

Nuxt.js服務端渲染入門

  • 在nuxt.config.js中配置plugins欄位,只在客戶端執行時,可將引入的外掛設定屬性ssr: false

Nuxt.js服務端渲染入門
7. next.config.js檔案配置

  • head 一般用於配置預設的meta標籤

  • css 用於定義應用的全域性樣式檔案,模組或第三方庫

  • dev 配置是開發還是生產模式

  • loading 個性化定製must.js使用的載入組建

  • env 定義用於客戶端和服務端的環境變數

……

更多可檢視官網

相關文章