Skip to main content

Command Palette

Search for a command to run...

用 VuePress 製作說明文件頁面 – 2:config.js 基本設定

Updated
2 min readView as Markdown
用 VuePress 製作說明文件頁面 – 2:config.js 基本設定
L

前端工程師 Augustus 的學習筆記 — solving problems, in simple ways.

本篇要解決的問題

上一篇〈 用 VuePress 製作說明文件頁面 – 1:安裝 〉我們安裝好了 VuePress,也建立了首頁的檔案,但除非我們只想要在頁面上呈現我們的圖跟文,而不加上像是頂部導覽列、側邊導覽列,也不客製我們要的網址路徑,不然,就一定會需要設定一個 config.js 檔。

本系列第二篇,來整理 config.js 上可以有哪些基本設定。


極重要的目錄結構

首先先看一下 VuePress 的目錄結構,之所以說很重要,是因為畢竟我們在用的是別人家產的開箱即用工具,很多事情必須要按別人的規則走,目錄結構就是其中一個規則。

VuePress 除了安裝後會有的那些資料夾,我們也可以手動照著目錄結構去新增我們的資料夾,官方文件上給的範例是這樣:

VuePress 目錄結構,來源:Directory Structure

可以看到大部份的資料夾、檔案,都是收在一個名為「.vuepress」的資料夾之下。

本篇要寫的 config.js 也是在 .vuepress 下。

大部份的資料夾後面都標示了「Optional」,選填,就是沒有這個檔案也不會妨礙我們使用 VuePress。

文件上有一句很有意思的話:

VuePress follows the principle of “Convention is better than configuration”.

VuePress 遵循「約定優於配置」的原则

Directory Structure

維基了一下「 約定優於配置 」,大概的意思就是,底層的東西,大部份原本需要人工設定的東西,VuePress 都搞定了,我們不用去花時間設定路由、樣式、編譯 Markdown 什麼的,VuePress 統包。But,如果你有更多的需求要滿足,那也可以透過自己寫的配置(config)去達成。

這蠻像我們在用 Vue CLI,或是 Nuxt,背後可能要花幾個月時間學的 Webpack、Router、Loader……都幫我們處理好了,我們只要會用就行。

很難說這對我們是好或不好,但就 VuePress 的使用目的,是快速產一份說明文件來說,確實不需要懂那麼多背後的原理也能達成。


建立 config.js

參照上一段的目錄結構,我們知道 config.js 檔必須要在 .vuepress 的資料夾底下,因此我們就先建立一個「.vuepress」的資料夾,再建一個 config.js 的檔案放在裡面:

建立 .vuepress 資料夾、config.js 檔案

文件上有說 config 的副檔名除了 js,也可以用 .yml 用 YAML 來寫,或是用 .toml 用 TOML 來寫。

因為文件上提供的程式碼都是用 JavaScript 寫的,為了可以無腦複製貼上快速使用,我們就直接存為 config.js。

這個 config.js 檔是用 Node.js 的 export 方式,所以開頭跟結尾要這樣子包起來:

module.exports = {
  // 裡面寫 config 的設定
}

Config 基本設定部份

Config 總共有哪些設定可用,官方文件( 英文 | 簡中 )都寫得很清楚,本篇會寫的是 Augustus 在製作給同事看的說明文件時,實際上有用到的,屬於「基本設定」的部份。

Config 除了基本設定外,還可以安裝佈景主題、外掛,這些就留到後面幾篇。

要注意的是,放在 .vuepress 下的 config.js 是全站的共同設定,如果想要改變每個頁面各自的基本設定也是可以的,請參考文件:Front Matter ( 英文 | 簡中 )。

title

title 會影響的就是 <title>,每一頁都可以設定 title,而在 config.js 上設定的 title 會讓整個站共用。

比方我們在 config.js 上設了 title: "這是站名",首頁的 README.md 檔案上也設了 title: "這是首頁",那最後我們在首頁上看到的 <title> 就會是:

<title>這是首頁 | 這是站名</title>

config.js 上的 title 會跟在每一頁 <title> 的後面。

除了影響 <title>,也會影響到整個頁面左上角,一般來說顯示 Logo 跟站名的地方,所以說這邊的 title 很重要,請勿亂設定。

description

網頁描述,這邊是設定每一個頁面 <meta name="description" content=""> 的預設值,如果各自頁面有設定 description 的話,就會以各自頁面的設定為主。

因為之前有被同事問過 titledescription 是會影響什麼?這邊稍微補充一下。

我們一般在 Google 搜尋某個關鍵字,比方我們搜尋「Let’s Write 前端工程師」,會看到這樣子的結果:

搜尋結果

藍色大字就是我們寫在 title 上的,灰色小字就是我們寫在 description 上的。

一般我們做 SEO 時,都會建議說 title 上要寫到關鍵字,description 則是要寫使用者看到後會想點擊的文案。這二個也都有建議的字數,SEO 就請各站各自努力啦~

base

基本路徑,一般來說像 Let’s Write 所有的頁面都是在 https://www.letswrite.tw/ 根目錄底下,放在根目錄下的不用改,因為 VuePress 的預設值就是 /

但今天會有一種情況,比方我們的文件檔最後是被規定要放在 https://www.example.tw/docs/ 下的話,base 就要設成:

base: /docs/

文件上是寫 base 的值要以「/」開始,也以「/」結束。

為了讓之後放到 GitHub Pages 時可以抓到靜態檔,本篇用的 Demo 是設為:

/letswrite-vuepress-document/

寫在這邊的值,會被插進 <head> 中。

<head> 裡除了放 titledescription,也會放一些像是 icon、social meta 等的東西,像是想要加上 icon 的話就寫:

head: [
  ['link', { rel: 'icon', href: '圖檔路徑' }]
]

dest

設定產出的靜態檔案要放在哪個資料夾,預設值是 .vuepress/dist

這個值建議修改,畢竟我們打開資料夾時,常常 . 開頭的資料夾會被隱藏起來,不太好被找到。

像我們可以設定:

dest: 'docs'

或:

dest: 'dist'

那當我們用終端機開啟 VuePress 的資料夾並輸入 yarn build 後,VuePress 就會把靜態檔案放進根目錄下「docs」或「dist」的資料夾裡。

為了讓之後放到 GitHub Pages 時可以抓到靜態檔,本篇用的 Demo 是設為 docs


原始碼、Demo

本篇開始,原始碼跟 Demo 都會放在 GitHub 上,歡迎取用。

Demo 會隨著系列文更新,所以看到的程式碼會逐漸豐富。

取用之前可以先對本篇點個讚或分享~

原始碼:https://github.com/letswritetw/letswrite-vuepress-document

Demo:https://letswritetw.github.io/letswrite-vuepress-document/


用 VuePress 製作說明文件頁面系列

  1. 安裝
  2. config.js 基本設定
  3. 導覽列
  4. 佈景主題、外掛
  5. 改樣式、加元件
  6. 部署

More from this blog

圖片壓縮:用 Compressor.js 自動調整品質壓縮至指定大小

本篇要解決的問題 很多網站功能會需要處理使用者上傳的圖片,比方讓使用者上傳會員照片。 但隨著手機相機愈做愈好,拍出來的照片隨便都是幾 MB,直接上傳的話,耗時也佔空間。 雖然網路上搜尋有許多圖片壓縮工具,但大多只能設定固定的壓縮的品質,無法保證壓縮後的檔案大小符合需求。 本筆記文將使用 Compressor.js 套件,實作一個圖片壓縮功能,符合以下需求: 自動嘗試不同的壓縮品質,直到檔案小於指定大小(ex: 600KB)為止。 將圖片轉換為 WebP 格式。 長、寬限制最大尺寸。 這...

Oct 4, 20254 min read
圖片壓縮:用 Compressor.js 自動調整品質壓縮至指定大小

使用 pm2.web 建立免費 PM2 監控系統

本篇要解決的問題 PM2 是 Node.js 裡常用的 process manager,一般如果是透過網頁監控、重啟,大概會使用官方的 Keymetrics。 但,But!就是這個 But!免費版最多只能監控 4 個 Process,再多就要掏出魔法小卡了。 問了 ChatGPT 後,發現有一個開源的替代方案:pm2.web,可以自己架設,不管幾個 process 都完全免費。 以下筆記如何使用 Vercel + MongoDB Atlas 部署 pm2.web,免費監控我們的 PM2。 架構...

Sep 26, 20252 min read
使用 pm2.web 建立免費 PM2 監控系統

GitHub Copilot + Figma MCP Server 實戰:用 AI 快速切版教學

本篇要解決的問題 最近在研究 MCP,剛好在 Threads 上看到有人實測 Figma MCP,想試看看是否真的能透過 AI 進行切版。 實作了一下後,還真的可以,不過目前僅針對簡單設計稿進行測試,結果略有跑版現象,整體效果尚可接受。 但目前就有這成果覺得厲害,再給它一段時間,也許前端工程師可以省掉切版的時間,把心力放到別的地方。 前提是,客戶要很明確的知道自己要什麼 XD,不然靠 AI 微調,還不如人工直接改程式還比較快。 用到的資源 以下是要實作用 Figma MCP 來切版,需要的資源:...

Apr 12, 20252 min read
GitHub Copilot + Figma MCP Server 實戰:用 AI 快速切版教學

使用 Google Apps Script 串接 Google Analytics API,整合多站數據

本篇要解決的問題 一間公司裡可能旗下會有多個網站,想同時查看所有網站的 GA 數據,通常需要開啟多個瀏覽器視窗並排顯示,操作較為繁瑣。 如果可以改由 API 來取得 GA 的數據,工程師就可以把各站的資料顯示在一個頁面上,而不用同時開多個 GA 來看。 開通 GA API 取得 GCP 專案編號 要先有 Google Cloud Platform(GCP)的專案,沒有的話登入自己的 Google 帳號,就可以先增一個。 專案編號就在 資訊主頁 上: 開通 GA API 功能 在使用 API ...

Mar 29, 20254 min read
使用 Google Apps Script 串接 Google Analytics API,整合多站數據

監聽 localStorage 事件:如何在同一頁面內偵測變更

本篇要解決的問題 我們有時會把資訊存在瀏覽器的空間裡,像是 Cookies、Local Storage、IndexedDB。 Local Storage 原生的 storage 事件主要用於跨分頁同步,如下: window.addEventListener("storage", () => {}); 但如果想要在同一個頁面內監聽變更,就需要手動覆寫 localStorage 方法。 localStorage event listener 我們可以透過 Storage.prototype 覆寫...

Mar 3, 20251 min read
監聽 localStorage 事件:如何在同一頁面內偵測變更
L

Let's Write

63 posts

前端工程師 August 的學習筆記 — solving problems, in simple ways.