Vue基于NUXT的SSR详解
YPE html>
éçäºèç½çå¿«éåå±ï¼æ们å¾å¤é¡¹ç®çå¼åéæ©ä½¿ç¨Vueï¼ä½æ¯å½å çææ¯ç®åè¿æ æ³å¯¹å®è¿è¡æåï¼è¿å°±é æäºVueçæ¥ä¼ï¼ä»å¤©ç»å¤§å®¶å¸¦æ¥äºVueåºäºNUXTçSSR详解ï¼å¸æ大家è½çç»ææ¡å¹¶çè®°äºå¿ã
æ¬æä»ç»äºVueåºäºNUXTçSSRï¼å享ç»å¤§å®¶ï¼ä¹ç»èªå·±ç个ç¬è®°ã
SSR
é¦å è¯´ä¸ SSRï¼æè¿å¾ççè¯ï¼æ为 Server Side Renderingï¼æå¡ç«¯æ¸²æï¼ï¼ç®çæ¯ä¸ºäºè§£å³å页é¢åºç¨ç SEO çé®é¢ï¼å¯¹äºä¸è¬ç½ç«å½±åä¸å¤§ï¼ä½æ¯å¯¹äºè®ºåç±»ï¼å 容类ç½ç«æ¥è¯´æ¯è´å½çï¼æç´¢å¼ææ æ³æå页é¢ç¸å ³å 容ï¼ä¹å°±æ¯ç¨æ·æä¸å°æ¤ç½ç«çç¸å ³ä¿¡æ¯ã
æå页é¢çåææ¯ html å«æ被æåå 容ï¼æ们ä¸å¦¨ççåºäº vue ççº¿ä¸ SPA 页é¢è¯·æ±æ¶è¿åäºä»ä¹
iDareXæ¢ç©
æ们çç»ä»¶é½æ¯è¿ä¸ª html æ件è¿ååå渲æå° éçãè¿å°±åçç解éäº SEO 缺é·çåå ã
æ¢ç¶è¯´å° SSR å¯ä»¥è§£å³ SEO çé®é¢ï¼ä¸é¾æ³å°åçå°±æ¯å°æ们ç html å¨æå¡ç«¯æ¸²æï¼åæå®æ´ç html æ件åè¾åºå°æµè§å¨ã
å¦å¤ SSR è¿éç¨ä»¥ä¸åºæ¯
- 客æ·ç«¯çç½ç»æ¯è¾æ ¢
- 客æ·ç«¯è¿è¡å¨èçæè ç´æ¥æ²¡æ JavaScript å¼æä¸
vue å®ç½ç»åºäº SSR åçå¾ç
对äºè¿å¹ å¾çåçå®ç½æ详ç»è§£éï¼æ¤ç±»æç« ä¹å¾å¤ï¼è¿éä¸èµè¿°ã
NUXT
æ们è¿å ¥æ£é¢è¯´ä¸ NUXT
Nuxt.js is a minimalistic framework for server-rendered Vue applications (inspired by Next.js)
ä½ç¨å°±æ¯å¨ node.js ä¸è¿ä¸æ¥å°è£ ï¼ç¶åçå»æ们æ建æå¡ç«¯ç¯å¢çæ¥éª¤ï¼åªéè¦éµå¾ªè¿ä¸ªåºçä¸äºè§åå°±è½è½»æ¾å®ç° SSR
å®è£ æµç¨
Nuxt.js å¢éæä¾äº vue-cli çåå§å模æ¿ãåæå®è£ vue-cliï¼å®è£ è¿ç忽ç¥æ¤æ¥
npm install -g vue-cli
å®æåå¨éè¦å建çç®å½ä¸æ§è¡ä»¥ä¸
vue init nuxt/startercd npm install
ä¾èµå®è£ å®æå
npm run dev
æå¼æµè§å¨ http://localhost:3000
说æï¼Nuxt.js ä¼çå¬ pages
ç®å½ä¸çæ¹åï¼æ·»å æ° page çæ¶åä¸éè¦éå¯æå¡
ç®å½ç»æ
å®æä¸é¢å½ä»¤åä½ çç®å½ç»æä¼å¦ä¸
Nuxt.js ç»åºäºæç®åçç®å½ç»æ
|-- pages |-- index.vue |-- package.json
ä¹å°±æ¯è¯´ï¼è³å°éè¦ä¸ä¸ª page æ¥ä½ä¸ºå±ç¤ºé¡µã
æ件çè·¯å¾å»ºè®®é½éç¨ç»å¯¹è·¯å¾ï¼è¡¨æ ¼å¦ä¸
ä¾ï¼æä¹å¨ /pages/user/me.vue
å¼å
¥ä¸ä¸ª static
æ件夹éçå¾ç
è·¯ç±
Nuxt.js æ ¹æ® pages ç®å½ç»æå»çæ vue-router é ç½®ï¼ä¹å°±æ¯è¯´ pages ç®å½çç»æç´æ¥å½±åè·¯ç±ç»æ
ä¾1:
|-- pages |-- posts |-- index.vue |-- welcome.vue |-- about.vue |-- index.vue
ä¼çæ
routes: [ { path: '/posts', component: '~pages/posts/index.vue' }, { path: '/posts/welcome', component: '~pages/posts/welcome.vue' }, { path: '/about', component: '~pages/about.vue' }, { path: '/', component: '~pages/index.vue' } ]
ä¾2:éèè·¯ç±
å¨æ件ååå _
|-- pages |-- _about.vue |-- index.vue
ä¼çæ
routes: [ { path: '/', component: '~pages/index.vue' } ]
é ç½®æ件
ç®å½ä¸ç nuxt.config.js
æ¯æ们å¯ä¸çé
ç½®å
¥å£ï¼è¿éä¸å»ºè®®ä¿®æ¹ .nuxt
ç®å½ï¼é¤éç¹æ®éæ±
é»è®¤çç»åæ们ä¸ä¸ªé ç½® ·head·css·loading· åå«æ¯å¤´é¨è®¾ç½®ï¼å ¨å±cssï¼loadingè¿åº¦æ¡
nuxt.config.js çå ¨é¨çé ç½®å¦ä¸,ç¹å»æ¥çå ·ä½ä¾å
- cache
- loading
- router
- css
- plugins
- head
å¦å¤è¿æä¾äº vuex çé ç½®ï¼æå ´è¶£å¯ä»¥å» github åå®ç½ã
NUXT è½ä¸ºæ们åä»ä¹
对äºä½¿ç¨å°±è¯´ä¸é¢è¿ä¹å¤ï¼å®ç½ä¸é½æï¼è¿éç»å¤§å®¶ä¸ä¸ªæ¦è§ï¼ï¼è¯´ä¸ä¸ºä»ä¹éæ© NUXT æ¥å SSR
é®é¢1ï¼å°±æ¯æ们æ é为äºè·¯ç±ååèç¦æ¼ï¼ä½ åªéè¦æç
§å¯¹åºçæ件夹å±çº§å建 .vue æ件就è¡
é®é¢2ï¼æ éèèæ°æ®ä¼ è¾é®é¢ï¼nuxt ä¼å¨æ¨¡æ¿è¾åºä¹åå¼æ¥è¯·æ±æ°æ®ï¼éè¦å¼å
¥ axios åºï¼ï¼èä¸å¯¹ vuex æè¿ä¸æ¥çå°è£
é®é¢3ï¼å
ç½®äº webpackï¼çå»äºé
ç½® webpack çæ¥éª¤ï¼nuxt ä¼æ ¹æ®é
ç½®æå
对åºçæ件
è¿æå¾å¤ä¾¿æ·ä¹å¤ï¼å¯ä»¥å°è¯å»åä¸åï¼è¯»è¯»æºç
ä»å¤©ç»å¤§å®¶ä»ç»çVueåºäºNUXTçSSR详解就å°è¿éäºï¼ç±ç«ææ¯é¢éå°ä¼ä¸ºå¤§å®¶æ¨åºæ´å¤ä¸ä¸çç¥è¯ï¼åªå¸æè½å¸®å©å¤§å®¶ä¸æçè¿æ¥ã