--- title: Blog building using vuepress date: 2021-09-19 categories: - projects - 學習歷程們 tags: - projects - 學習歷程們 --- # 個人部落格搭建 ###### tags: `Project` [Github Source code](https://github.com/URLoser404/URLoser404.github.io) [URLoser404](https://urloser404.github.io) [Blog doc](https://urloser404.github.io/projects/BlogBuild.html#%E4%BE%86%E7%94%B1) [hackmd](https://hackmd.io/@IWLYF/ryp6ROvQt) ## 來由 一直以來都想要搭建一個屬於自己的部落格 也嘗試過許多架構 例如flask + heroku 的組合 又或是直接在hackmd上面寫 後來看到了vuepress架構 加上本人超愛純markdown語法的 便馬上開始搭建 於是就有了現在這個網站 之後的文章應該也都會陸續搬家到這裡 ## 介紹 vuepress是node.js為基礎的靜態網頁生成工具 可以將markdown文檔轉換為靜態網頁 通常用於技術文檔撰寫、個人部落格製作等等 vuepress的生態發展十分完善 在網路上有許多的theme和plugin可以使用 ## 過程 vuepress官方文檔有提供完善的教學 必要的環境包刮: - 打包工具 – node.js - 模組管理包 – yarn、npm擇一 ### 基本環境建置 先根據vuepress官方建置基本的網頁 #### 創建專案 ```sh mkdir 專案名稱 && cd 專案名稱 ``` #### 安裝模組管理包 官方推薦使用yarn管理專案 這裡面便直接使用yarn ```sh yarn init ``` #### 安裝vuepress ```sh yarn add -D vuepress ``` ![](https://i.imgur.com/208xEym.png) #### 創建文件資料夾 ```sh mkdir docs && echo '# 網站首頁' > docs/README.md ``` #### 編輯yarn設定檔 ```json { "name": "專案名稱", //手動改為專案名稱 "version": "1.0.0", "main": "index.js", "license": "MIT", "devDependencies": { "vuepress": "^1.8.2" }, "scripts": { //加入以下三行 "docs:dev": "vuepress dev docs", // "docs:build": "vuepress build docs" // }, // "dependencies": { "vuepress-theme-reco": "^1.6.6" } } ``` #### 創建vuepress設定資料夾 ```sh cd docs && mkdir .vuepress ``` #### 創建vuepress設定檔 ```sh touch config.js ``` ```js module.exports = { title: '網站標題', description: '網頁描述' } ``` #### 測試執行 ```sh yarn docs:dev #剛剛加入的腳本 ``` ### 美化以及部落格設定 在原本的網頁基礎下 調整參數達到自己想要的部落格樣式 #### 安裝並使用 這次選用了一個叫做vuepress-reco的theme 安裝方法如下 ```zh yarn add vuepress-theme-reco ``` ```js module.exports = { theme: "reco", //加入此行 themeConfig: { //部落格主題設定 type: 'blog' //設定模式為部落格 } } ``` 安裝完後可以直接根據vuepress-reco的官方文檔進行建置 #### 製作主頁 直接使用剛剛的README.md來當作部落格的主頁 在首頁中要額外加入yaml的設定 ```yaml --- home: true --- ``` 至此 我們得到了一個根據vuepress-reco所建立的首頁 效果如下 ![](https://i.imgur.com/4pj6DdX.png) ![](https://i.imgur.com/48l4LRi.png) #### 加入文章 至此 專案的結構如下 ``` ├── docs │ ├── .vuepress │ │ └── config.js │ └── README.md └── package.json ``` 添加文章的方式也十分簡單 只需要在docs裡面直接加入md檔 如下 ``` ├── docs │ ├── .vuepress │ │ └── config.js │ ├── 文章一 │ ├── 文章二 │ └── README.md └── package.json ``` 也可以在docs裡面用資料夾進行分類 如下 ``` ├── docs │ ├── .vuepress │ │ └── config.js │ ├── 分類一 │ │ ├── 文章一 │ │ └── 文章二 │ ├── 分類二 │ │ ├── 文章三 │ │ └── 文章四 │ └── README.md └── package.json ``` 在每篇文章中也需要加入yaml設定 ```yaml --- title: 文章一 date: 2021-01-01 categories: - 分類一 tags: - 分類一 --- ``` 文章只要放在docs資料夾內就會直接顯示在首頁 如下 ![](https://i.imgur.com/9yQx2Iv.png) #### 製作導覽列 vuepress-reco提供了方便的導覽列製作方法 只需要在config.js ```js module.exports = { theme: 'reco', themeConfig: { nav: [ { text: '連結', link: '連結', icon: 'icon' } //添加連結到導覽列 ] } } ``` #### 網頁icon設定 因為網頁的icon是整個網頁共用的 所以我們需要創建一個公用的資料夾來儲存他 避免路徑出現問題 在 /docs/.vuepress/ 中加入 public 資料夾 並在裡面放入網頁的icon (favicon.ico) ``` ├── docs │ ├── .vuepress │ │ ├── public (加入此資料夾) │ │ │ └── favicon.ico (網頁icon) │ │ └── config.js │ ├── 分類一 │ │ ├── 文章一 │ │ └── 文章二 │ ├── 分類二 │ │ ├── 文章三 │ │ └── 文章四 │ └── README.md └── package.json ``` 加入後便可以在config.js中加入連結 ```js module.exports = { head: [ //在html的 head中加入連結 ['link', { rel: 'icon', href: '/favicon.ico' }] // ] // } ``` #### 首頁布局設定 跟官方網站長得一模一樣的首頁稍嫌單調 所以我們可以透過更改config.js 以及首頁中的yaml設定 來改變首頁的布局 因參數過多 將在程式碼裡用註解解釋 ```js module.exports = { themeConfig: { mode: 'dark', //網站進入後預設色彩模式 modePicker: true, //使否開啟色彩選擇器 (預設為true) logo: '/hero.jpg', //左上角logo author: 'URLoser404', //文章預設作者姓名 authorAvatar: '/hero.jpg', //右下角介紹欄頭像 blogConfig: { //右下角介紹欄排版 category: { //'分類'欄位設定 location: 2, //欄位位置 (預設為2) text: 'Category' //欄位文字 (預設為'Category') }, tag: { //'標籤'欄位設定 location: 3, //欄位位置 (預設為2) text: 'Tag' //欄位文字 (預設為'Tag') } }, friendLink: [ //右下角連結欄位設定 (可為複數) { title: '連結名稱', desc: '連結描述', link: '連結' } ], } } ``` #### 其他參數設定 ```js module.exports = { head: [ ['meta', { name: 'viewport', content: 'width=device-width,initial-scale=1,user-scalable=no' }] //手機版網頁滑動優化 ], themeConfig: { noFoundPageByTencent: false, //關閉404頁面公益活動 subSidebar: 'auto' //開啟每篇文章自動生成側邊欄 } } ``` ### 打包為靜態網頁 整體都建置完成後 可以使用我們一開始在 package.json 裡面創建的腳本 ```sh yarn docs:build ``` 來打包成靜態網頁 跑完後 可以看到.vuepress資料夾中生成了一個 名為 dist 的資料夾 裡面就是打包完成的靜態網頁 ### 上傳至伺服器 很多人的家裡 並不方便架設伺服器 網路上也有很多伺服器出租的服務 也有很多的免費方案 因為這次要使用的只是靜態網站 便選用了github自帶的github io > 使用前需安裝git 首先將路徑調至dist資料夾 並在github開啟新的repository 便可以直接推上github ```sh git init git remote add origin [repository git 網址] git add . git commit -m "上傳描述" git push origin master ``` 之後在repository裡的設定 將github page的路徑調至正確的位置 ![](https://i.imgur.com/epnHtwW.png) 整個網頁即可成功上線 [成品](https://urloser404.github.io) ## 心得 這次完成了自己一直以來都想要的個人部落格 除了了解更多markdown語法的奇怪用途 還了解到node.js生態的龐大 算是一個小小的side project 加上最近想開始經營github 做完了這個之後 除了會在上面放一些廢文 之後大部分專案的內容也會同步放在github跟這裡 ## 參考 [Vuepress](https://vuepress.vuejs.org) [Vuepress-reco](https://vuepress-theme-reco.recoluan.com)