一看就會的保姆級教程,10 分鐘搭建個人博客

Part1 前言

相信很多人都想擁有一個自己的個人博客,現有的個人博客搭建框架已經有很多了,例如 hexovuepressjekyll 等等,這裏我選用 vuepress 來快速搭建個人博客

網上教程千千萬,但總歸都是零零散散的,沒人會給你講解得清清楚楚,所以我這裏就手把手來講解一下如何從零搭建

這裏先放上 vuepress 的官網鏈接:https://www.vuepress.cn/(opens new window)[1]

1 一、準備工作

首先我們要把需要的東西都下好,例如:nodegitvuepress

node 下載鏈接 (opens new window)[2]

git 下載鏈接 (opens new window)[3]

2 二、安裝腳手架

這裏本應該安裝 vuepress 的,但是 vuepress 其本身是一個文檔型的頁面,比較簡約,我們肯定都想讓自己的博客變得好看一點,所以這裏推薦一個大佬製作好的主題 vuepress-theme-reco ,其頁面效果大致是這樣的:

隨便找個路徑,在終端下輸入該指令:

// npm
npm install @vuepress-reco/theme-cli -g

等待下載好以後,再輸入輸入該指令進行初始化項目:

theme-cli init

在初始化時,會讓你填寫一些信息,例如:博客名稱、博客標題、博客描述..

你只需要全部按回車先跳過即可,後續這些信息都還可以自己填寫的

等項目全部初始化好了以後,文件目錄是這個樣子的:

├── blog 
     ├── .vuepress      
     │   ├── public   // 存放靜態資源
     │   │     ├── avatar.png  // 頭像圖片 
     │   │     ├── favicon.ico   // 網站icon圖標
     │   │     ├── hero.png    // 我也不知道有啥用,刪了也可以
     │   │     └── logo.png    // 網站導航欄左上角的logo圖片
     │   │   
     │   └── config.js      // 配置文件,非常重要!!!  
     ├── blogs  // 存放文章,即.md文件
     │   ├── ...
     │   ├── ...
     │   └── ... 
     ├── docs     // 存放一些後續需要配置的文件,暫時不需要了解
     ├── .gitignore       // 提交git倉庫時需要忽略的文件
     ├── package.json      // 管理包文件
     └── README.md        // 自動生成的,我們可以先不管

瞭解完文件目錄結構以後,我們需要啓動一下項目看一眼,因爲剛生成的項目很多依賴包還沒安裝,並且當前的路徑也沒在項目中,所以我們要按下面的指令依次執行,進行啓動項目

// 第一步,進到項目根目錄中
cd blog

// 第二步,安裝依賴包(這個過程很慢,需要等待)
npm install

// 第三步,等依賴包下完了以後再執行該指令啓動項目
npm run dev

啓動好以後會自動打開網頁,我們可以看到這樣的畫面了,可以說這個主題的腳手架已經幫我們做了很多工作了,頁面也非常的漂亮

3 三、配置信息詳解

這個頁面的一切都是可以由我們的配置文件來控制的,也就是 .vuepress/config.js ,我們來看看它具體的配置信息具體含義是什麼(這裏非常重要,因爲後續如果你要改動頁面的什麼東西,都要在這裏改的,所以必須非常熟悉各個屬性的作用)

module.exports = {
  "title""",   
  "description""",
  "dest""public",
  "head"[
    [
      "link",
      {
        "rel""icon",
        "href""/favicon.ico"
      }
    ],
    [
      "meta",
      {
        "name""viewport",
        "content""width=device-width,initial-scale=1,user-sca
      }
    ]
  ],
  "theme": "reco",
  "themeConfig": {
    "nav": [
      {
        "text": "Home",
        "link": "/",
        "icon": "reco-home"
      },
      {
        "text": "TimeLine",
        "link": "/timeline/",
        "icon": "reco-date"
      },
      {
        "text": "Docs",
        "icon": "reco-message",
        "items": [
          {
            "text": "vuepress-reco",
            "link": "/docs/theme-reco/"
          }
        ]
      },
      {
        "text": "Contact",
        "icon": "reco-message",
        "items": [
          {
            "text": "GitHub",
            "link": "https://github.com/recoluan",
            "icon": "reco-github"
          }
        ]
      }
    ],
    "sidebar": {
      "/docs/theme-reco/": [
        "",
        "theme",
        "plugin",
        "api"
      ]
    },
    "type": "blog",
    "blogConfig": {
      "category": {
        "location": 2,
        "text": "Category"
      },
      "tag": {
        "location": 3,
        "text": "Tag"
      }
    },
    "friendLink": [
      {
        "title": "午後南雜",
        "desc": "Enjoy when you can, and endure when you must.",
        "email": "1156743527@qq.com",
        "link": "https://www.recoluan.com"
      },
      {
        "title": "vuepress-theme-reco",
        "desc": "A simple and beautiful vuepress Blog & Doc theme.",
        "avatar": "https://vuepress-theme-reco.recoluan.com/icon_vuepress_reco.png",
        "link": "https://vuepress-theme-reco.recoluan.com"
      }
    ],
    "logo": "/logo.png",
    "search": true,
    "searchMaxSuggestions": 10,
    "lastUpdated": "Last Updated",
    "author": "",
    "authorAvatar": "/avatar.png",
    "record": "xxxx",
    "startYear": "2017"
  },
  "markdown": {
    "lineNumbers": true
  }
}

接下來按順序講解一下各個屬性的作用

(1)title

該屬性表示的是博客的標題

我們將 title 值修改爲 前端印象 ,看一看有哪些地方有所變動

(2)description

該屬性表示該網站的一些描述信息

我們將 description 的值改爲 該網站用於記錄前端知識總結 ,看一看有哪些地方有所變動

(3)dest

該屬性表示的是項目打包以後文件生成的目錄

例如我們將該 dest 的值改成 ./dist ,那麼當我們執行 npm run build 打包文件後,會在當前根目錄下生成一個 dist 文件夾,打包好的項目文件都在該文件夾中

(4)head

該屬性表示的是 html 文檔的 head 標籤中需要額外插入的其它標籤

默認生成的是:

"head"[  // 在head標籤中生成以下標籤
    [
      "link",    // 生成link標籤
      {
        "rel""icon",    // rel屬性值爲icon
        "href""/favicon.ico"   // href屬性值爲 /favicon.ico
      }
    ],
    [
      "meta",      //生成meta標籤
      { 
        "name""viewport",   // name屬性值爲viewport
        "content""width=device-width,initial-scale=1,user-sca  // content屬性值爲width=device-width,initial-scale=1,user-scalable=no
      }
    ]
]

當然我們也可以繼續添加別的標籤,例如:

"head"[  // 在head標籤中生成以下標籤
    ["link"{ "rel""icon""href""/favicon.ico" }],
    ["meta"{ "name""viewport""content""width=device-width,initial-scale=1,user-sca }],
    ["meta", { "name": "keywords", "content": "前端,js,css" }],
    ['meta', { name: 'author', content: '零一' }],
]

(5)theme

該屬性表示的是當前項目使用的主題

這裏我們是用 vuepress-theme-reco 主題的腳手架生成的,所以它默認就是 reco ,我們可以不用修改,當然後續你想使用別的主題也可以,可以參考一下 vuepress 的官網

(6)themeConfig

該屬性表示的是主題的配置信息

這裏東西有點多,我們慢慢來講

1. nav

該屬性表示導航欄的配置信息

默認生成的 nav 值如下:

"nav"[
      {   // 第一個導航按鈕
        "text""Home",   //  按鈕名稱爲 Home
        "link""/",      //  對應的跳轉鏈接爲  /
        "icon""reco-home"  // 按鈕的前置圖標爲 reco-home
      },
      {   // 第二個導航按鈕
        "text""TimeLine",     //  按鈕名稱爲 TimeLine
        "link""/timeline/",  //  對應的跳轉鏈接爲  /timeline/
        "icon""reco-date"   // 按鈕的前置圖標爲 reco-date
      },
      {   // 第三個導航按鈕
        "text""Docs",    //  按鈕名稱爲 Docs
        "icon""reco-message",  // 按鈕的前置圖標爲 reco-message
        "items"[   // 該按鈕的子菜單
          {   // 子菜單中的第一個導航按鈕
            "text""vuepress-reco",
            "link""/docs/theme-reco/"
          }
        ]
      },
      {  // 第四個導航按鈕 
        "text""Contact",   //  按鈕名稱爲 Contact
        "icon""reco-message",  // 按鈕的前置圖標爲 reco-message
        "items"[  // 該按鈕的子菜單
          {    // 子菜單中的第一個導航按鈕
            "text""GitHub",
            "link""https://github.com/recoluan",
            "icon""reco-github"
          }
        ]
      }
]

詳細的註釋我都已經寫在上面了

2. sidebar

該屬性表示的是側邊欄的導航信息

默認生成的是:

"sidebar"{
      "/docs/theme-reco/"[
        "",    // 空字符串對應的是 README.md
        "theme",  // 對應 theme.md
        "plugin",  // 對應plugin.md
        "api"    // 對應api.md
      ]
},

該配置信息表示的是當路徑爲 /docs/theme-reco/ 時,側邊欄會自動找路徑 ./docs/theme-reco/ 下的 README.mdtheme.mdplugin.mdapi.md 文件進行識別生成側邊欄,如圖所示:

側邊欄的文字其實是識別了 md 文件中的 title ,例如 theme.md 文件對應的名稱就是 title 的值

---
title: theme
date: 2020-05-27
---

This is theme.

這是一種寫法,但其實還有另一種更爲複雜一點的寫法,我們來看一下

"sidebar"{
 "/docs/theme-reco/"[
        {
            title: '一些文件',    // 標題信息
            collapsable: true,   // 是否可摺疊
            children: [        // 該塊內容對應的所有鏈接
                "",    
                "theme",  
                "plugin", 
                "api"    
            ]
        }
    ]
}

這樣的實現效果其實和剛纔是差不多的,區別的話可以看下圖來對比一下:

3. type

該屬性表示的是當前項目的類型

默認的是 blog ,也就是我們現在看到的樣式,其實還有別的值可以設定,例如 docs ,其對應的就是比較簡約化的文檔樣式了,當然了這些都是腳手架幫我們處理好了的

4. blogConfig

該屬性表示的是導航欄的配置信息,其是 reco 主題設置的

不知你有沒有發現,剛剛設置 nav 導航欄信息的時候,一共有 4 個導航欄按鈕,但實際呢?

實際情況卻有 6 個,那麼多出來的兩個是哪裏來的呢?其實就是 blogConfig 中設置的

"blogConfig"{
      "category"{
        "location": 2,     // 在導航欄中的位置在第二個
        "text""Category"
      },
      "tag"{
        "location": 3,   // 在導航欄中的位置在第三個
        "text""Tag"
      }
},

這兩個都是內置的設定好了的,所以只要按這樣配置好就可以了,不過我感覺是不太需要,大家可以自己抉擇

該屬性是用於設置友鏈的

具體在網站中的位置如下圖所示:

配置的話也比較簡單,模仿默認的配置去做就可以了:

"friendLink"[
      {
        "title""午後南雜",
        "desc""Enjoy when you can, and endure when you must.",
        "email""1156743527@qq.com",
        "link""https://www.recoluan.com"
      },
      {
        "title""vuepress-theme-reco",
        "desc""A simple and beautiful vuepress Blog & Doc theme.",
        "avatar""https://vuepress-theme-reco.recoluan.com/icon_vuepress_reco.png",
        "link""https://vuepress-theme-reco.recoluan.com"
      }
],

該屬性表示的是導航欄最左側的 logo 圖片,如下圖所示

在寫該值時的根路徑是 public ,即 /logo.png 表示的就是 public 下的 logo.png

該屬性表示是否有搜索功能

8. searchMaxSuggestions

該屬性官網也沒做過多說明,所以我也不知道有什麼用,暫且可以不用管

9. lastUpdated

該屬性表示每篇文章底部顯示的 "最後一次更新時間" 的文案

如下圖所示:

10. author

該屬性表示作者的名稱,在每一篇文章的作者署名中都會沿用該名稱

11. authorAvatar

該屬性表示作者的頭像,與 logo 一樣的路徑規則,頭像顯示位置如下圖所示:

record: ICP 備案號

recordLink: ICP 備案指向的鏈接

cyberSecurityRecord: 公安部備案文案

cyberSecurityLink: 公安部備案指向鏈接

如果項目不是部署在個人服務器上的話,這四個屬性可以忽略不管

13. startYear

該屬性表示博客的開始時間(只需要寫年份就可以了),在網站上的展示如圖所示:

左側是我們填寫的時間,右側是根據當前時間自動生成的年份

(7) markdown

該屬性裏存儲着一些對於 markdown 解析的配置

例如腳手架自動生成的 lineNumbers 表示的就是代碼塊顯示行號

其實還有其它很多的 markdown 配置,詳細參考 vuepress 官方 (opens new window)[4]

4 四、開始輸入文章吧

按照上面進行配置,一個基本的博客就搭建好了,現在就可以開始瘋狂輸入文章了,所有的文章只需要以.md文件格式放在blogs文件夾下即可

我們創建一篇文章試試吧~

---
title: 我的第一篇文章
date: 2021-05-07
categories:
 - 分類1
tags:
 - 標籤1
 - 標籤2
---

這是我的第一篇文章

這裏有四個屬性可以配置,分別是titledatecategoriestags

這四個屬性在頁面上的體現如下圖所示:

其中,date的時間也會在時間軸中呈現出來,即你所有的文章會按date的時間從上到下按時間新->舊的順序進行排序

另外,我們本文使用的主題框架還爲文章提供了一個很不錯的功能:加密,只需要在文章中給 keys 屬性賦值一個md5加密後的字符串即可

比如我們將密碼設爲zero2one,那麼打開在線 md5 加密 (opens new window)[5] 網站,將密碼輸入到框中,就能得到一串密文,該密文就是我們要設置的keys的值

---
title: 我的第一篇文章
date: 2021-05-07
categories:
 - 分類1
tags:
 - 標籤1
 - 標籤2
keys:
 - 'ababf713be53f3d10366196bf0297c30'
---

這是我的第一篇文章

來看下效果:

5 五、添加評論模塊

其實這個主題框架已經內置了評論插件@vuepress-reco/vuepress-plugin-comments,我們需要做的就是做一些額外的配置

首先去 Valine 官網 (opens new window)[6] 註冊一下Valine賬號,註冊好後進行登錄,然後進入控制檯,點擊左下角創建應用

應用創建好以後,進入剛剛創建的應用,選擇左下角的設置>應用Key,然後就能看到你的APP IDAPP Key了:

拿到APP IDAPP Key後,我們來到我們項目中.vuepress/config.js中的themeConfig屬性中,按如下設置即可:

module.exports = {
  // ...
  themeConfig: {
    // ....
    valineConfig: {     // valine 評論功能配置信息
      appId: '在這輸入你的appid',// your appId
      appKey: '在這輸入你的appKey', // your appKey
      placeholder: '盡情留下你想說的話吧~',           // 評論框佔位符
      avatar: 'wavatar',           // 評論用戶的頭像類型
      highlight: true,         // 代碼高亮
      recordIP: true,         // 記錄評論者的IP
    },
  }
  // ...
}

這樣我們就能看到我們每篇文章的最底部都有留言功能了

當然如果我們不想讓某篇文章有留言板,也可以設置isShowComments屬性爲false即可

---
title: 我的第一篇文章
date: 2021-05-07
categories:
 - 分類1
tags:
 - 標籤1
 - 標籤2
keys:
 - 'ababf713be53f3d10366196bf0297c30'
isShowComments: false
---

這是我的第一篇文章

此時留言板就不存在了

6 六、總結

到此爲止,基本上一個博客該有的功能就都具備了。其實本文介紹的這個主題腳手架他還提供了一個插件廣場(支持實現各種各樣的功能),目前這個插件廣場中有:打賞插件回到頂部插件、音樂播放器插件、可愛光標插件、流程圖插件等等

最後,大家也可以訪問一下我搭建的個人博客 [7] ,我正在我的個人博客裏打造一套完整的寶典,歡迎關注~

參考資料

[1]

https://www.vuepress.cn/(opens new window): https://www.vuepress.cn/

[2]

node 下載鏈接 (opens new window): http://nodejs.cn/download/

[3]

git 下載鏈接 (opens new window): https://git-scm.com/downloads

[4]

vuepress 官方 (opens new window): https://www.vuepress.cn/config/#markdown

[5]

在線 md5 加密 (opens new window): https://vuepress-theme-reco.recoluan.com/views/1.x/password.html

[6]

Valine 官網 (opens new window): https://console.leancloud.cn/register

[7]

我搭建的個人博客: https://lpyexplore.gitee.io/blog/

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/kFWwKbFyGcb_dS6hw3t9Fw