VuePress搭建技術(shù)網(wǎng)站與個(gè)人博客

前言

只聽過vue罐盔,沒聽過vuepress揭厚?它可是新的vue全家桶成員之一却特,尤雨溪大神于2018年4月12日推出。
不信筛圆?請(qǐng)看Evan You github裂明。star數(shù)已過萬,并不少太援。
vuepress用于迅速搭建技術(shù)文檔網(wǎng)站與個(gè)人博客闽晦,簡(jiǎn)單快捷,下面和我一起開始學(xué)習(xí)吧提岔!


(想直接coding的同學(xué)可從第三節(jié)開始)

一尼荆、模塊概述

1. 定義

Vue 驅(qū)動(dòng)的靜態(tài)網(wǎng)站生成器

2. 亮點(diǎn)
自己總結(jié)的vuepress優(yōu)點(diǎn)
3. 同類模塊橫向?qū)Ρ?/h5>

①. Nuxt:

  • Nuxt: VuePress 能做的事情,Nuxt 理論上確實(shí)能夠勝任唧垦,但Nuxt 是為構(gòu)建應(yīng)用程序而生的
  • VuePress: 專注在以內(nèi)容為中心的靜態(tài)網(wǎng)站上,同時(shí)提供了一些為技術(shù)文檔定制的開箱即用的特性

②. Docsify / Docute:
同樣都是基于 Vue液样,然而它們都是完全的運(yùn)行時(shí)驅(qū)動(dòng)振亮,因此對(duì) SEO 不夠友好

③. Hexo:
主題系統(tǒng)太過于靜態(tài)以及過度地依賴純字符串, 而不是基于Vue。同時(shí)鞭莽,Hexo 的 Markdown 渲染的配置也不是最靈活的

④. GitBook:

  • 當(dāng)文件很多時(shí)坊秸,每次編輯后的重新加載時(shí)間長(zhǎng)得令人無法忍受
  • 默認(rèn)主題導(dǎo)航結(jié)構(gòu)也比較有限制性
  • 主題系統(tǒng)也不是 Vue 驅(qū)動(dòng)的
  • GitBook 團(tuán)隊(duì)更專注于將其打造為一個(gè)商業(yè)產(chǎn)品而不是開源工具

二、成品展示

1. 技術(shù)文檔網(wǎng)站:

vue全家桶官網(wǎng):vue澎怒、vuex褒搔、vue-clivue-router以及vuepress本身

2. 個(gè)人博客:

博客1(默認(rèn)主題)博客2(自定義主題)

三星瘾、開始搭建

coding之前走孽,建議大家先了解markdown語法,為之后的文檔撰寫做鋪墊:傳送門

1. 全局安裝 VuePress

npm install -g vuepress

2. 創(chuàng)建并進(jìn)入項(xiàng)目

mkdir vuepress-demo && cd vuepress-demo

3. 初始化項(xiàng)目

npm init -y // 默認(rèn)配置yes
在生成的package.json中琳状,添加如下兩個(gè)啟動(dòng)命令:

"scripts": {
  "dev": "vuepress dev docs",
  "build": "vuepress build docs"
}
4. 創(chuàng)建基本項(xiàng)目結(jié)構(gòu)

官方只有推薦目錄結(jié)構(gòu)磕瓷,并沒有現(xiàn)成的cli,所以需要通過命令行或手動(dòng)創(chuàng)建如下結(jié)構(gòu):

vuepress-demo
├─package.json
├─docs
|  ├─README.md
|  ├─.vuepress
|  |     ├─config.js
|  |     ├─public
|  |     |   └avatar.png
|  |     |   └spider.png

其中有后綴的是文件念逞,沒后綴的是文件夾

5. 配置config.js

該文件為項(xiàng)目最重要的配置文件困食,幾乎所有配置項(xiàng)都是在此進(jìn)行。
我們先來一個(gè)最簡(jiǎn)單的配置看看效果:

module.exports = {
    title: '南宮的博客',
    head: [ // 注入到當(dāng)前頁面的 HTML <head> 中的標(biāo)簽
      ['link', { rel: 'icon', href: '/avatar.png' }], // 增加一個(gè)自定義的 favicon(網(wǎng)頁標(biāo)簽的圖標(biāo))
    ],
    themeConfig: {
      logo: '/avatar.png',  // 左上角logo
      nav:[ // 導(dǎo)航欄配置
        {text: '首頁', link: '/' },
        {text: '技術(shù)文檔', link: '/tech/interview/' },
        {text: '簡(jiǎn)書主頁', link: 'http://www.reibang.com/u/c455567c7f50'}      
      ],
      sidebar: 'auto', // 側(cè)邊欄配置
    }
  };

想看詳細(xì)配置的同學(xué)可直接查詢官網(wǎng)-config配置翎承。
注意:路由根路徑為docs文件夾硕盹,靜態(tài)資源(圖片)根路徑為public文件夾

6. 啟動(dòng)項(xiàng)目

npm run dev
默認(rèn)服務(wù)啟動(dòng)在了http://localhost:8080/,效果如下:

demo第一版

我們配置的title叨咖、nav瘩例、sidebar、logo全都生效了芒澜!
恭喜仰剿,你完成了第一個(gè)極簡(jiǎn)版demo!

這里使用的官方默認(rèn)主題

  • 左上角的logo與title
  • 右上角的全局搜索框與nav導(dǎo)航欄
  • 左側(cè)的sidebar導(dǎo)航欄(自動(dòng)將md一級(jí)標(biāo)題設(shè)置為導(dǎo)航文案)
  • 右側(cè)的markdown內(nèi)容

注意:項(xiàng)目自帶熱更新; 但config.js有時(shí)可能會(huì)熱更新失敗痴晦,需要重啟項(xiàng)目

7. 配置首頁(可選):

一般的技術(shù)文檔網(wǎng)站都需要一個(gè)首頁作為該技術(shù)的簡(jiǎn)介南吮,個(gè)人博客也需要這樣的歡迎頁。vuepress提供了一個(gè)默認(rèn)格式的簡(jiǎn)潔首頁誊酌,需要在你的根級(jí)(docs下)README.md添加home: true部凑,格式如下:

---
home: true
heroImage: /spider.png
heroText: 我的主頁
tagline: My homepage
actionText: 技術(shù)文檔 →
actionLink: /tech/interview/
features:
- title: 簡(jiǎn)潔至上
  details: 以 Markdown 為中心的項(xiàng)目結(jié)構(gòu),以最少的配置幫助你專注于寫作碧浊。
- title: Vue驅(qū)動(dòng)
  details: 享受 Vue + webpack 的開發(fā)體驗(yàn)涂邀,在 Markdown 中使用 Vue 組件,同時(shí)可以使用 Vue 來開發(fā)自定義主題箱锐。
- title: 高性能
  details: VuePress 為每個(gè)頁面預(yù)渲染生成靜態(tài)的 HTML比勉,同時(shí)在頁面被加載的時(shí)候,將作為 SPA 運(yùn)行驹止。
footer: 南宮的個(gè)人博客
---

效果如下:


首頁
8. 變更主題(可選)

① 更換主題:
對(duì)默認(rèn)主題不滿意浩聋,想換個(gè)別的主題?安排臊恋!
config.js中設(shè)置:

module.exports = {
  theme: 'vuepress-theme-xx'
}

可以在npm中尋找自己喜歡的主題衣洁,其中以 @vuepress/theme- 開頭的主題是官方維護(hù)的主題:

npm主題

② 開發(fā)主題:
npm上也沒有合適的主題?安排抖仅!
那咱們就自己開發(fā)一個(gè)主題坊夫,篇幅原因就不介紹細(xì)節(jié)了砖第,感興趣的同學(xué)可以自行查看官方文檔-開發(fā)主題

③ 修改默認(rèn)主題:
不想那么麻煩,但默認(rèn)主題又不滿足需求环凿?安排梧兼!
那就在默認(rèn)主題基礎(chǔ)上做一些修改,以滿足需求拷邢。
執(zhí)行如下命令袱院,可將默認(rèn)主題的各功能組件釋放出來:
vuepress eject docs
你會(huì)發(fā)現(xiàn),在根目錄下瞭稼,多了一個(gè)theme文件夾忽洛,如下:

默認(rèn)主題文件

上圖列出了主要的布局組件,只需在其中做適量修改以滿足業(yè)務(wù)需求即可环肘。

9. md文件中使用vue組件(可選)

vuepress項(xiàng)目中的md文件欲虚,可以直接使用vue組件。
我們可以在.vuepress文件夾下新建一個(gè)components文件夾悔雹,其中的vue組件會(huì)自動(dòng)注冊(cè)到全局复哆,如下:


md文件使用vue組件

頁面效果如下:


點(diǎn)擊按鈕
10. 客戶端增強(qiáng)(可選)

如果你想對(duì)自己的應(yīng)用做一些優(yōu)化,比如使用router做登錄攔截腌零、給vue實(shí)例掛載全局變量或注冊(cè)其他組件等梯找,可以在.vuepress下新建文件enhanceApp.js

export default ({
  Vue, // VuePress 正在使用的 Vue 構(gòu)造函數(shù)
  options, // 附加到根實(shí)例的一些選項(xiàng)
  router, // 當(dāng)前應(yīng)用的路由實(shí)例
  siteData // 站點(diǎn)元數(shù)據(jù)
}) => {
  // ...做一些其他的應(yīng)用級(jí)別的優(yōu)化
}

這個(gè)文件類似于vue-cli腳手架中的main.js文件

四、部署上線

通過上面的工作益涧,我們已經(jīng)掌握了vuepress的基本用法锈锤,大家可以填充更多的md文件去豐富你的網(wǎng)頁。
但這些都還只是跑在本地闲询,想要所有人都能通過互聯(lián)網(wǎng)訪問你的網(wǎng)站久免,需要申請(qǐng)一個(gè)域名以及服務(wù)器,并將你的項(xiàng)目部署上去:

1. 選擇你的服務(wù)器

服務(wù)器有免費(fèi)和收費(fèi)兩種扭弧,各有優(yōu)劣:
① 免費(fèi):
使用 Github Pages 阎姥。即 Github 提供的、用于搭建個(gè)人網(wǎng)站的靜態(tài)站點(diǎn)托管服務(wù)鸽捻。很多人用它搭建個(gè)人博客呼巴。這種方式的好處是免費(fèi)、方便御蒲,壞處是速度可能會(huì)有些慢衣赶、不能被國內(nèi)的搜索引擎收錄。
② 收費(fèi):
國內(nèi)做的比較好的云服務(wù)有阿里云删咱、騰訊云,好處是速度有保證豪筝、可以被搜索引擎收錄痰滋,壞處是要花錢摘能,土豪請(qǐng)無視。
這里我們選擇方案①

2. github創(chuàng)建倉庫

① 登錄 github
② 新建倉庫一:username.github.io
(必須為你的github賬戶的username敲街,而不是昵稱啥的)
③ 新建倉庫二团搞,名稱隨意如vuepress-demo
二者的關(guān)系是:倉庫一負(fù)責(zé)顯示網(wǎng)站內(nèi)容,我們不需要改動(dòng)它多艇;日常開發(fā)和新增內(nèi)容逻恐,都在倉庫二中,并通過 npm run deploy 命令峻黍,將代碼發(fā)布到倉庫一

3. 關(guān)聯(lián)本地項(xiàng)目與github倉庫
// 先cd到你的demo
cd vuepress-demo
// git初始化
git init
// 關(guān)聯(lián)github倉庫
git remote add origin git@github.com:nan-gong/vuepress-demo.git
4. 新建部署文件

①根目錄下新建deploy.sh:

#!/usr/bin/env sh

# 確保腳本拋出遇到的錯(cuò)誤
set -e

# 生成靜態(tài)文件
npm run build

# 進(jìn)入生成的文件夾
cd docs/.vuepress/dist

# 如果是發(fā)布到自定義域名
# echo 'www.yourwebsite.com' > CNAME

git init
git add -A
git commit -m 'deploy'

# 如果你想要部署到 https://USERNAME.github.io
git push -f git@github.com:nan-gong/nan-gong.github.io.git master

# 如果發(fā)布到 https://USERNAME.github.io/<REPO>  REPO=github上的項(xiàng)目
# git push -f git@github.com:USERNAME/<REPO>.git master:gh-pages

cd -

② 根目錄新建README.md
此文件為你的項(xiàng)目描述或用法复隆,一般的git項(xiàng)目都會(huì)有此文件,和項(xiàng)目中的md文件無關(guān)姆涩。

5. git提交

git提交前挽拂,先確保你的本地登錄了git賬號(hào),否則沒有權(quán)限提交到遠(yuǎn)端骨饿。
如果本地未登錄亏栈,可參考git初次登錄教程。
另外宏赘,可以在根目錄下添加.gitignore文件绒北,以防止不必要的提交:

.gitignore

// 提交到暫存區(qū)
git add .
// 提交到本地倉庫
git commit -m '基本搭建完畢'
// push到github倉庫
git push --set-upstream origin master

檢查你的github倉庫,發(fā)現(xiàn)已經(jīng)上傳成功:


github倉庫
6. 新建deploy指令并執(zhí)行

package.json 文件夾中添加發(fā)布命令:

"scripts": {
  "deploy": "bash deploy.sh"
}

npm run deploy

7. 發(fā)布成功察署!

查看自己的博客域名:https://nan-gong.github.io/
這樣所有的人都能訪問到你的博客了闷游!
github源碼傳送門

8. PWA(可選)

PWA,即progressive web apps箕母,以web的形式給你原生app的體驗(yàn)储藐。
VuePress 默認(rèn)支持 PWA,配置方法如下:
① config.js添加配置:

head: [ // 注入到當(dāng)前頁面的 HTML <head> 中的標(biāo)簽
  ['link', { rel: 'manifest', href: '/photo.jpg' }],
  ['link', { rel: 'apple-touch-icon', href: '/photo.jpg' }],
],
serviceWorker: true // 是否開啟 PWA

② public 文件夾下新建 manifest.json 文件嘶是,添加:

{
    "name": "南宮",
    "short_name": "南宮",
    "start_url": "index.html",
    "display": "standalone",
    "background_color": "#2196f3",
    "description": "南宮的個(gè)人主頁",
    "theme_color": "blue",
    "icons": [
      {
        "src": "./avatar.png",
        "sizes": "144x144",
        "type": "image/png"
      }
    ],
    "related_applications": [
      {
        "platform": "web"
      },
      {
        "platform": "play",
        "url": "https://play.google.com/store/apps/details?id=cheeaun.hackerweb"
      }
    ]
  }

③ 重新部署:npm run deploy
④ 移動(dòng)端操作:

PWA操作流程

完結(jié)撒花钙勃!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市聂喇,隨后出現(xiàn)的幾起案子辖源,更是在濱河造成了極大的恐慌,老刑警劉巖希太,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件克饶,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡誊辉,警方通過查閱死者的電腦和手機(jī)矾湃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來堕澄,“玉大人邀跃,你說我怎么就攤上這事霉咨。” “怎么了拍屑?”我有些...
    開封第一講書人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵途戒,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我僵驰,道長(zhǎng)喷斋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任蒜茴,我火速辦了婚禮星爪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘矮男。我一直安慰自己移必,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開白布毡鉴。 她就那樣靜靜地躺著崔泵,像睡著了一般。 火紅的嫁衣襯著肌膚如雪猪瞬。 梳的紋絲不亂的頭發(fā)上憎瘸,一...
    開封第一講書人閱讀 51,754評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音陈瘦,去河邊找鬼幌甘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛痊项,可吹牛的內(nèi)容都是我干的锅风。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼鞍泉,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼皱埠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起咖驮,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤边器,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后托修,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體忘巧,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年睦刃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了砚嘴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖际长,靈堂內(nèi)的尸體忽然破棺而出婆誓,到底是詐尸還是另有隱情,我是刑警寧澤也颤,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站郁轻,受9級(jí)特大地震影響翅娶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜好唯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一竭沫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧骑篙,春花似錦蜕提、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至杨名,卻和暖如春脏榆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背台谍。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來泰國打工须喂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人趁蕊。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓坞生,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親掷伙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子是己,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容