作者:太皇太后@毛豆前端
隨著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內容。 使用步驟如下:
- npm install vue vue-server-renderer --save-dev
- 新建專案結構如下:
![Nuxt.js服務端渲染入門](https://i.iter01.com/images/e1048ac82bfbd8af8c37a552092ced37515b602f96c27ed8639bfe057ef7aa2e.png)
- 在server.js檔案中編寫程式碼:
![Nuxt.js服務端渲染入門](https://i.iter01.com/images/f7753b540c259ce8266cc0a22b83883da5afb20fcc1d91640d4ec630f9d09934.png)
- 在template.html編寫html,注意 <!—vue-ssr-outlet—> 這個必須寫,相當於佔位,服務端渲染的頁面內容填充到此。
![Nuxt.js服務端渲染入門](https://i.iter01.com/images/33f815cae2fa2dbe5cc234f399071cdf1703e86dafdc454e366df3fc6dd1b6f4.png)
-
執行命令node server.js啟動服務
-
瀏覽器開啟http://localhost:3100/,會看到data-server-rendered = “true”,表示是服務端渲染
![Nuxt.js服務端渲染入門](https://i.iter01.com/images/23aed426b0beb6ec4eef8c362b6a19d0035a66ffdedf0db23bb09fa9530f403e.png)
三、建立一個Nuxt.js專案
- 安裝
確保安裝了npx(npx在npm版本5.2.0預設安裝了)
- npx create-nuxt-app <專案名>
- npm install # or yarn
- npm run dev
經過以上三個步驟,開啟瀏覽器,訪問localhost:3000,這跟建立一個Vue專案沒太多不同。專案目錄結構如下:
![Nuxt.js服務端渲染入門](https://i.iter01.com/images/5870c6d1894c1562542b3d9031361d8819ca5c3bad389980f999334dba74a6f5.png)
![Nuxt.js服務端渲染入門](https://i.iter01.com/images/63e14d1d2148900bf0d9207982d8d3a6f7e522d26d5773ba9c6618e582f2bb7f.png)
- nuxt路由機制
pages目錄中的任何Vue元件都會基於他們的檔名稱和目錄結構自動新增到vue-router中。Nuxt可以生成對應的路由配置,在.nuxt/rouer.js可以體現出來,如圖:
![Nuxt.js服務端渲染入門](https://i.iter01.com/images/40ca4bcc7b5dc653288918578d6b16ad82202e60ebac562a3f7b1ef634e6007f.png)
在父級vue檔案內增加用於顯示子檢視內容
為適應不同業務需求,還有動態路由,動態巢狀路由等功能 ,可以參照官網說明:zh.nuxtjs.org/guide/routi…
- assets和static靜態資源使用
assets包含未編譯的資源,與webpack如何載入和處理檔案有更多關係,與nuxt如何工作沒有太多關係。
static包含一些對映到你的站點的根目錄的靜態檔案。
比如:靜態資源放在assets下: < img src="~/assets/timg.jpeg"/>,如果靜態資源放在static下: < img src="timg.jpeg"/>
- layouts使用
在layouts目錄下建立一個新的佈局,即.vue檔案,程式碼如下
![Nuxt.js服務端渲染入門](https://i.iter01.com/images/2476fbed5b34fbb57b552c63ceb27e0b41c4e63dc1c865791db67d63870d02d0.png)
export default {
layout: 'admin-layout'
}
複製程式碼
注意:如果你輸入一個不正確的url,會顯示一個錯誤頁面。事實上,這個錯誤頁面是另外一種佈局。nuxt有它自己的錯誤頁面佈局,但是如果你想要編輯它,只需要建立一個error.vue佈局,然後nuxt就會使用這個佈局代替預設的佈局
- middleware使用
中介軟體(middleware)是允許你定義一個自定義函式(提供了一個context引數,可以獲取sever端和client端各種資訊)執行在一個頁面或佈局之前。比如我們在渲染頁面之前判斷許可權的攔截,或者根據使用者許可權跳轉到相應的路由等。 就本地開發環境時跳轉到指定路由為例,可這麼配置:
- 首先我們需要在middleware資料夾中新增auth.js
![Nuxt.js服務端渲染入門](https://i.iter01.com/images/b2c279a91e90210814fce6e86aaec003ed1e0b2633d72cc4cc7147404e28a2cd.png)
![Nuxt.js服務端渲染入門](https://i.iter01.com/images/879cab5fc54a60d3017fd0f97538be5c412cf449896ccd054bb5e40dc47c8415.png)
- 在nuxt.config.js檔案中配置
![Nuxt.js服務端渲染入門](https://i.iter01.com/images/cbbda4a4275f58cbd3372e4e2fa39b12b1d0c1337105457eeb9982bd16a1e655.png)
- 在瀏覽器開啟localhost:3000/,此時會訪問到localhost:3000/dev
![Nuxt.js服務端渲染入門](https://i.iter01.com/images/7a7e3c9ffc9beabc1551487611931b8f472bb982ea6403a91c1d2cb0b1818930.png)
可以配置需要在vue應用例項化之前需要執行的js外掛,可以是你自己寫的庫或是第三方庫。比如:對於axios這種ajax請求外掛,element-ui第三方庫等。就element-ui為例,可以這麼配置:
- 首先我們需要在plugins資料夾中新增外掛檔案element-ui.js
![Nuxt.js服務端渲染入門](https://i.iter01.com/images/7e5e52be2f81f004503ee4b9cc04665752d89f63952fe69bf27f0b88f9cb111b.png)
![Nuxt.js服務端渲染入門](https://i.iter01.com/images/81b365bc25fdf1dd32828c3a197a13ba541358e6ac0e85f2d1a1ef86fa20f540.png)
- 在nuxt.config.js中配置plugins欄位,只在客戶端執行時,可將引入的外掛設定屬性ssr: false
![Nuxt.js服務端渲染入門](https://i.iter01.com/images/5ace83063dc4b9968448759c2bae77fbb2770caa2aadea439209ad62c242a5a2.png)
-
head 一般用於配置預設的meta標籤
-
css 用於定義應用的全域性樣式檔案,模組或第三方庫
-
dev 配置是開發還是生產模式
-
loading 個性化定製must.js使用的載入組建
-
env 定義用於客戶端和服務端的環境變數
……
更多可檢視官網