开发工具总结(15)之Vuepress制作文档并发布到GitHub

版权声明:本文为博主原创文章,未经博主允许不得转载。https://www.jianshu.com/p/307684deff51

转载请标明出处:
https://www.jianshu.com/p/307684deff51

本文出自 AWeiLoveAndroid的博客


在线文档制作工具系列篇 ↓:

前面讲解了Gitbook,Hexo, Jekyll三种方式制作文档,今天讲一下Vuepress制作文档。Vuepress自带一个彩色的主题风格,很漂亮,相对于前面几个来说,可操作性比较方便,上手快,格式众多,适合小白学习和使用。下面具体讲一下Vuepress的使用。


一、工具

VuePress支持使用Yarnnpm来安装,Node.js版本需要>=8才可以。使用yarn更快。建议使用yarn。


二、全局安装VuePress

使用命令 npm install -g vuepress或者yarn global add vuepress 都行,感觉 yarn比较快。

下载路径分别在C:\Users\Administrator\AppData\Roaming\npm\vuepress
C:\Users\Administrator\AppData\Local\Yarn\bin\vuepress

使用npm下载vuepress

[图片上传失败...(image-c2e686-1562312383507)]

使用yarn下载vuepress

[图片上传失败...(image-20f773-1562312383507)]

查看版本号:vuepress --version 我的版本号是0.14.8


三、初始化项目

操作步骤:

1.新建项目文件夹:mkdir hello_vuepress ,然后进入文件夹:cd hello_vuepress

2.还有好多文件需要创建,由于每次创建项目都要手动创建这么多文件,很麻烦的。为了方便,我写了一个脚本,把常用的文件都创建了。你可以把脚本取名叫做:test.bat,格式为.bat,然后把脚本放到刚创建的文件hello_vuepress里面。

脚本内容如下:这里的js文件和json文件需要手动格式化一下,我这里全部写在了一行,没有做换行和空格处理。

test.bat------
set curdir=%~dp0
cd /d %curdir%
@echo off
echo >>package.json
set var="ECHO is off."
findstr /v %var% "package.json"
echo {"name": "替换成你的工程名字","version": "1.0.0","main": "index.js","license": "MIT","scripts": {"docs:dev": "vuepress dev docs","docs:build": "vuepress build docs"},"dependencies": {"vuepress": "^0.14.8"}} > package.json
md docs
md docs\.vuepress
echo >>docs\.vuepress\config.js
echo module.exports = {title: '个人文档',description: '练习文档'} > docs\.vuepress\config.js
md docs\.vuepress\public
echo >>docs\README.md
echo # 第一个VuePress页面 > docs\README.md
md docs\guide
echo >>docs\guide\README.md
echo # 这是导航文件 > docs\guide\README.md
echo >>docs\config.md
echo # 这是config文件 > docs\config.md
pause

下面这个是按照VuePress官网推荐的完整的目录写的一个脚本,如果有需要的话,可以执行下面这个脚本创建。例如,我把这个脚本取名叫做test-all.bat

test-all.bat------
set curdir=%~dp0
cd /d %curdir%
@echo off
echo >>package.json
set var="ECHO is off."
findstr /v %var% "package.json"
echo {"name": "替换成你的工程名字","version": "1.0.0","main": "index.js","license": "MIT","scripts": {"docs:dev": "vuepress dev docs","docs:build": "vuepress build docs"},"dependencies": {"vuepress": "^0.14.8"}} > package.json
md docs
md docs\.vuepress
md docs\.vuepress\components
md docs\.vuepress\theme
echo >>docs\.vuepress\theme\Layout.vue
md docs\.vuepress\public
md docs\.vuepress\styles
echo >>docs\.vuepress\styles\index.styl
echo >>docs\.vuepress\styles\palette.styl
md docs\.vuepress\templates
echo >>docs\.vuepress\templates\dev.html
echo >>docs\.vuepress\templates\ssr.html
echo >>docs\.vuepress\config.js
echo module.exports = {title: '个人文档',description: '练习文档'} > docs\.vuepress\config.js
echo >>docs\.vuepress\enhanceApp.js
echo >>docs\README.md
echo # 第一个VuePress页面 > docs\README.md
md docs\guide
echo >>docs\guide\README.md
echo # 这是导航文件 > docs\guide\README.md
echo >>docs\config.md
echo # 这是config文件 > docs\config.md
pause

官方推荐的完整路径如下图所示:

vuepress官网推荐完整目录

各个文件目录的含义:

doc目录下各文件夹或文件名称 含义
.vuepress 用于存放全局的配置、组件、静态资源等。
.vuepress/components 该目录中的 Vue 组件将会被自动注册为全局组件。
.vuepress/theme 用于存放本地主题。
.vuepress/styles 用于存放样式相关的文件。
.vuepress/styles/index.styl 将会被自动应用的全局样式文件,会生成在最终的 CSS 文件结尾,具有比默认样式更高的优先级。
.vuepress/styles/palette.styl 用于重写默认颜色常量,或者设置新的 stylus 颜色常量。
.vuepress/public 静态资源目录。
.vuepress/templates 存储 HTML 模板文件。
.vuepress/templates/dev.html 用于开发环境的 HTML 模板文件。
.vuepress/templates/ssr.html 构建时基于 Vue SSR 的 HTML 模板文件。
.vuepress/config.js 配置文件的入口文件,也可以是 YML 或 toml。
.vuepress/enhanceApp.js 客户端应用的增强。

注意:当你想要去自定义 templates/ssr.htmltemplates/dev.html 时,最好基于 默认的模板文件 来修改,否则可能会导致构建出错。

3.然后使用命令yarn init -y,进行初始化操作。这时候会创建一个package.json文件,用于配置。

注意:由于上一步的脚本里面已经创建了这个文件,所以就没必要执行这一步了。这里列举这个命令,针对那些手动创建文件的人来说的。)

命令使用如图所示:

初始化

四、构建和编译

使用vuepress命令编译项目:

vuepress dev

使用vuepress命令构建静态文件:

vuepress build

由于上面的package.json里面配置了自定义打包命令,所以就用那个就好了,修改后的命令如下:

编译项目:

npm run docs:build 或者 yarn docs:build

运行项目:

npm run docs:dev 或者 yarn docs:build

下图是使用npm run docs:build命令的示例:

编译项目

下面是使用npm run docs:dev的示范,然后可以打开浏览器http://localhost:8080/查看效果了。它会运行``docs目录里面的READ.md`的内容。关于每一部分怎么来的,后面讲配置的时候详细说明。
效果如下图所示:

首个页面

五、VuePress中的MarkDown特有的设置

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.5.1/katex.min.css">

<link rel="stylesheet" href="https://cdn.jsdelivr.net/github-markdown-css/2.2.1/github-markdown.css"/>

(一)TOC

看内容目录就是用[[toc]]生成的
注:只要放置:[[TOC]],就能把其后面的标题如:#,##,...######自动生成目录树,注意,[[TOC]]要独立一行,并前面和后面都要空一行

示例如下图所示:

TOC目录的使用

(二)直接支持html,css

如果你懂html和css,那下面这些效果就不在话下了:

使用示例:

* 页内跳转

<a href="#jump_test">来个页内跳转</a>,跳转到文未的:`<a id="jump_test">我是页内跳转到的位置</a>` ,对应:`id="jump_test"`

* 颜色 #5bdaed

<span  style="color: #5bdaed; ">先给点颜色你看看</span>

* 颜色 #AE87FA

<span  style="color: #AE87FA; ">再给点颜色你看看</span> 

* 字体大小 1.3em

<span  style="font-size:1.3em;">试试改变字体大小</span>

* 字体大小 1.3em  bold加粗

<span  style="font-size:1.3em;font-weight: bold;">改变字体大小,再来个粗体又如何?</span>

* 内容居中:

<p style="text-align:center">
试试内容居中
</p>

* 内容居右:

<p style="text-align:right">
那内容居右呢?
</p>

* 综合示例:

<p style="text-align:center;color:#1e819e;font-size:1.3em;font-weight: bold;">
来个综合的试试
<br/>
第二行
</p>
----

<a id="jump_test">我是页内跳转到的位置</a>

<a id="jump_1">我是页内跳转到的位置</a>
[^10]: 注脚跳转位置
111

使用截图如下所示:

支持html和css

(三)GitHub 风格的表格

使用示例:

| Tables        | Are           | Cool  |
| ------------- |:-------------:| -----:|
| col 3 is      | right-aligned | $1600 |
| col 2 is      | centered      |   $12 |
| zebra stripes | are neat      |    $1 |

使用效果如下图所示:

GitHub 风格的表格示例

(四)Emoji

使用示例:

:tada: :100::fire:

使用效果如下图所示:

使用Emoji示例

(五)自定义容器

使用示例:

::: tip 提示
This is a tip
:::

::: warning 警告
This is a warning
:::

::: danger 危险
This is a dangerous warning
:::

使用效果如下图所示:

自定义容器示例

(六)代码中的行高亮 语言后面使用{数字} 例如js{4} 表示第四行高亮

效果示意图

(七)导入代码段(这个有点不好懂 不管它)

...略

(八)公式的支持,需要导入css

  • 1.使用命令yarn global add markdown-it全局安装markdown-it

  • 2.使用命令yarn global add markdown-it-katex全局安装markdown-it-katex

  • 3.使用命令yarn global add markdown-it-katex-external全局安装markdown-it-katex-external

  • 4.然后在config.js中设置markdown节点,如下:

  // 对markdown的配置
  markdown: {
    // 显示行号
    lineNumbers: true,
    // markdown-it-anchor 的选项
    anchor: { permalink: false },
    // markdown-it-toc 的选项
    toc: { includeLevel: [1, 2, 3, 4] },
    config: md => {
       // 使用更多 markdown-it-katex 插件!
       md.use(require("markdown-it-katex"));
    }
  }
  • 5.然后在package.json配置每个依赖库,免得出错。
    "dependencies": {
        "markdown-it": "^8.4.2",
        "markdown-it-anchor": "^5.0.2",
        "markdown-it-container": "^2.0.0",
        "markdown-it-emoji": "^1.4.0",
        "markdown-it-katex": "^2.0.3",
        "markdown-it-katex-external": "^1.0.0",
        "markdown-it-table-of-contents": "^0.4.3",
        "vuepress": "^0.14.8"
    }

如果报错某个module找不到,就下载对应的就行了,例如:
报错:Cound not found module markdown-it-container,以下就是一个错误示意图:

module错误

解决:使用yarn global add markdown-it-container进行下载即可。

  • 6.在markdown中的使用:

在markdown文件开头加入以下两个css链接,然后再去写katex语法即可。

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.5.1/katex.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/github-markdown-css/2.2.1/github-markdown.css"/>

下例是公式的使用:

公式的使用
  • 7.最后通过编译命令npm run docs:dev,浏览器输入localhost:8080,回车就可以看到结果了。

六、配置详解

(一)package.json配置

路径为:hello_vuepress/package.json

开始的4行是运行yarn init -y自动生成的,这里的scripts节点里面配置两个启动命令。dependencies节点配置vuepress的版本号。

{
    "name": "hello_vuepress", // 项目名 
    "version": "1.0.0", // 版本号
    "main": "index.js", // 主要处理函数所在的js文件名
    "license": "MIT", // 协议名称
    "scripts":{ // 配置编译运行命令
        "docs:dev": "vuepress dev docs",
        "docs:build": "vuepress build docs"
    },
    "dependencies": {  // 配置vuepress版本号
        "vuepress": "^0.14.8"
    }
} 

配置之后就用npm run docs:dev运行,编译成静态文件用命令npm run docs:build,编译之后的静态文件在docs\.vuepress\dist\目录,可以在本地使用,也可以部署到github或者服务器。

(二)config.js配置

路径为:hello_vuepress/docs/.vuepress/config.js

(1) 普通配置

设置网站标题,并显示在默认主题的导航栏中。

title: "LZW的博客",

设置网站描述。相当于 HTML 中的<meta> 标签。

description: "LZW的个人网站",

要部署到的网站基础路径:(例如发布到http://aweiloveandroid.github.io/vuepress_usage
,仓库地址为:https://github.com/AweiLoveAndroid/AweiLoveAndroid.github.io/vuepress_usage,那么这里的base就填写/vuepress_usage/,注意前后各带有一个”/“)

base: "/vuepress_usage/",

额外的需要被注入到当前页面的 HTML <head> 中的标签时,配置head项,这里是自定义的favicon:

head: [
    ['link', { rel: 'icon', href: '/favicon.ico' }]
],

设置主机名,默认0.0.0.0:

// host:"", 

设置端口号,默认8080:

// post:"",

指定vuepress build的输出目录,默认值: .vuepress/dist,这里设置成public目录。

dest: "public",

(1) 国际化

  • 1.要做国际化(多语言),需要以下文件结构:
docs
  ├─ README.md
  ├─ page1.md
  ├─ charaters
  │    └─ README.md
  ├─ zh
  │   ├─ README.md
  │   ├─ page1.md
  │   └─ charaters
  │        └─ README.md
  └─ 
      ├─ README.md
      ├─ page1.md
      └─ charaters
           └─ README.md
  • 2.列举几个lang属性值:
语言 ISO代码
英文 en
美式英文 en-us
中文(旧标准) zh-CN
简体中文(新标准) zh-cmn-Hans
繁体中文(新标准) zh-cmn-Hant
  • 3.在.vuepress/config.js 中指定 locales 选项:

每个语言对象的键(key),是语言的访问路径。 然而,一种特例是将 '/' 作为默认语言的访问路径。

设置lang这个值会被设置在 <html>lang 属性上,用于设置语言。

设置title是标题,description是网站描述。如果某个语言对象没有声明 titledescription,VuePress 会尝试获取根语言对象上相应的值。如果每个语言对象都声明了 titledescription,则可以省略根语言对象上的 titledescription

module.exports = {
  locales: {
    "/": {
      lang: "en-US",
      title: "LZW’s blog",
      description: "websie of LZW"
    },
    "/zh/": {
      lang: "zh-CN",
      title: "LZW的首个博客",
      description: "LZW的首个个人网站"
    }
  }
},

(3) 默认主题配置

1.首页

默认的主题提供了一个首页(Homepage)的布局。想要使用它,需要在你的根级 README.mdYAML front matter 指定 home: true。任何 YAML front matter 之后额外的内容将会以普通的 markdown 被渲染,并插入到 features 的后面。

以下是一个如何使用的例子:

---
home: true
heroImage: /favicon.png
heroText: Hero 标题
tagline: Hero 副标题
actionText: 快速上手 →
actionLink: /zh/guide/
features:
- title: 简洁至上
  details: 以 Markdown 为中心的项目结构,以最少的配置帮助你专注于写作。
- title: Vue驱动
  details: 享受 Vue + webpack 的开发体验,在 Markdown 中使用 Vue 组件,同时可以使用 Vue 来开发自定义主题。
- title: 高性能
  details: VuePress 为每个页面预渲染生成静态的 HTML,同时在页面被加载的时候,将作为 SPA 运行。
footer: MIT Licensed | Copyright © 2018-present Evan You
---
2.其它页面的Front Matter配置

在正文前面声明title,或者其它属性值。以下是VuePress自带的一些配置选项,可以自由选择使用:

选项 写法示例 作用
title "title": "page1" 当前页面的标题。
lang "lang": "en-US" 当前页面的语言。
description "description": "当前页面的描述" 当前页面的描述。
layout "layout": "xxx.vue" 设置当前页面的布局组件。
metaTitle "metaTitle": "重写默认的 meta title" 重写默认的 meta title。
permalink "permalink": "/:year/:month/:day/:slug" 设置页面的永久链接。

permalink的模板变量包括:

变量 介绍
:year 文章发布的年份 (4数字)
:month 文章发布的月份 (2数字)
:i_month 文章发布的月份 (前面不带0)
:day 文章发布的日份 (2数字)
:i_day 文章发布的日份 (前面不带0)
:slug 蛞蝓化文件路径 (不带扩展名)
:regular VuePress默认的生成永久链接的方式,具体实现看

meta:指定额外的要注入的 meta 标签。

meta:
  - name: description
    content: hello
  - name: keywords
    content: super duper SEO

导航栏和侧边栏有关的Front Matter设置:

选项 写法示例 作用
navbar navbar: false false表示:禁用页面的导航栏
sidebarDepth sidebarDepth: 2 设置侧边栏的嵌套的标题链接最大深度
sidebar sidebar: auto 自动生成侧边栏
sidebar sidebar: false 禁用侧边栏

设置上 / 下一篇链接:

选项 写法示例 作用
prev prev: ./some-other-page 设置上一篇链接
next next: false 设置下一篇链接

设置是否指定页面的编辑链接:

选项 写法示例 作用
editLink editLink: false false为禁用,true表示开启

完整示例如下:

---
"title": "page1"
"lang": "en-US"
"description": "当前页面的描述"
"layout": "xxx.vue"
"permalink": "/:year/:month/:day/:slug"
meta:
  - name: description
    content: hello
  - name: keywords
    content: super duper SEO
---
3.导航栏
a.导航栏链接
  • 通过themeConfig.nav 增加一些导航栏链接。示例如下:
module.exports = {
  themeConfig: {
    nav: [
      { text: 'Home', link: '/' },
      { text: 'Guide', link: '/guide/' },
      { text: 'GitHub', link: 'https://github.com' },
    ]
  }
}

如图所示:

nav添加链接
  • 当你提供了一个 items 数组而不是一个单一的 link 时,它将显示为一个下拉列表,如下所示:
module.exports = {
  themeConfig: {
    nav: [
      {
        text: '编程语言',
        items: [
          { text: 'Java', link: '/' },
          { text: 'HTML', link: '/' }
        ]
      }
    ]
  }
}

如图所示:

nav下拉列表
  • 你还可以通过嵌套的 items 来在 下拉列表 中设置分组,如下所示:
module.exports = {
  themeConfig: {
    nav: [
      {
        text: '程序员',
        items: [
          { text: '移动端', items: [{ text: 'Android', link: '/' },
          { text: 'iOS', link: '/' }] },
          { text: '服务端', items: [{ text: 'Java', link: '/' },
          { text: 'PHP', link: '/' }] }
        ]
      }
    ]
  }
}

如图所示:

nav分组
b.禁用导航栏
module.exports = {
  themeConfig: {
    navbar: false
  }
}

你也可以通过上文提到的 YAML front matter 来禁用导航栏。

4.侧边栏
a.标题链接
  • 1.需要配置 themeConfig.sidebar即可让侧边栏生效。基本的配置,需要包含了多个链接的数组,如下所示:
module.exports = {
  themeConfig: {
    sidebar: [
      'config',
      ['/guide/', '标题2']
    ],
  }
}

书写规则:
省略·.md扩展名,以/结尾的相当于*/README.md,如果未显示地指定链接的文字,会自动引用md文件的H1标记后面的文字作为标题,或者md里面指定页面的标题。如果显示地指定链接的文字。比如上例中的/guild/这个路由,它的标题是标题2,侧边栏切换到这个页面时,显示的就是标题2`。
示例图如下所示:

侧边栏标题优先级
    1. 可以通过上文提到的 YAML front matter 来设置侧边栏的嵌套的标题链接最大深度。
  • 3.显示所有页面的标题链接

默认情况下,侧边栏只会显示由当前活动页面的标题(headers)组成的链接,你可以将 themeConfig.displayAllHeaders 设置为 true 来显示所有页面的标题链接:

module.exports = {
  themeConfig: {
    displayAllHeaders: true // 默认值:false
  }
}
  • 4.活动的标题链接

默认情况下,当用户通过滚动查看页面的不同部分时,嵌套的标题链接和 URL 中的 Hash 值会实时更新,这个行为可以通过以下的配置来禁用:(一般用默认的就可以,不做修改。)

module.exports = {
  themeConfig: {
    activeHeaderLinks: false, // 默认值:true
  }
}
b.侧边栏分组
  • 你可以通过使用对象,也就是大括号{}来将侧边栏划分成多个组:
module.exports = {
  themeConfig: {
    sidebar: [
      {
        title: "web",
        children: ["/web/", "/web/one", "/web/two"]
      },
      {
        title: "php",
        children: ["/php/", "/php/three", "/php/four"]
      },
      {
        title: "life",
        children: ["/life/", "/life/life1", "/life/life2"]
      }
    ],
  }
}

注意:
1.侧边栏标题最多只能显示三级标题,其它的不显示。
例如你设置了######都可以显示,但是###############都不能显示。
2.如果超过了三层,滑动页面时,侧边栏的标题指示不会跟随移动。

c.自动生成侧边栏
    1. 所有页面启用自动生成侧边栏:
module.exports = {
  themeConfig: {
    sidebar: 'auto'
  }
}
    1. 如果设置了多语言模式,可以指定特定语言启动自动生成侧边栏:
module.exports = {
  themeConfig: {
     '/zh/': {
       sidebar: 'auto'
     }
  }
}
    1. 可以通过 YAML front matter 来自动生成侧边栏。
d.关于禁用侧边栏

可以通过 YAML front matter 来禁用指定页面的侧边栏。

module.exports = {
  //////////  主题信息 ///////////
  themeConfig: {
    //git 仓库地址
    repo: "https://github.ioAWeiLoveAndroid/MyDocs",
    // 是否编辑链接
    editLinks: true,
    // 编辑链接文字
    editLinkText: "在 GitHub 上编辑此页",

    // 导航栏
    nav: [
      { text: "首页", link: "/nav/" },
      { text: "关于", link: "/nav/about" },
      { text: "联系", link: "/nav/contact" },
      {
        text: "更多",
        items: [
          { text: "博客", link: "https://github.com/AweiLoveAndroid" },
          { text: "简书", link: "https://www.jianshu.com/u/f408bdadacce" }
        ]
      }
    ],

    // 侧边栏
    sidebar: [
      {
        title: "foo",
        collapsable: false,
        children: ["/foo/", "/foo/one", "/foo/two"]
      },
      {
        title: "bar",
        collapsable: false,
        children: ["/bar/", "/bar/three", "/bar/four"]
      }
    ],

    // 嵌套的标题链接深度,默认的深度为1。
    // sidebarDepth: 2

    //搜索
    search: true,
    searchMaxSuggestions: 10,
    lastUpdated: "Last Updated" // string | boolean
  },

  //////////  PWA配置 ///////////
  serviceWorker: true
};
5.默认主题的国际化
module.exports = {
  themeConfig: {
    locales: {
      '/': {
        // text for the language dropdown
        selectText: 'Languages',
        // label for this locale in the language dropdown
        label: 'English',
        // text for the edit-on-github link
        editLinkText: 'Edit this page on GitHub',
        // config for Service Worker 
        serviceWorker: {
          updatePopup: {
            message: "New content is available.",
            buttonText: "Refresh"
          }
        },
        // algolia docsearch options for current locale
        algolia: {},
        nav: [
          { text: 'Nested', link: '/nested/' }
        ],
        sidebar: {
          '/': [/* ... */],
          '/nested/': [/* ... */]
        }
      },
      '/zh/': {
        // 语言下拉菜单的展示文本
        selectText: '选择语言',
        // 该语言在下拉菜单中的 label 标签
        label: '简体中文',
        // github 编辑链接的文字
        editLinkText: '在 GitHub 上编辑此页',
        serviceWorker: {
          updatePopup: {
            message: "发现新内容可用.",
            buttonText: "刷新"
          }
        },
        nav: [
          { text: '嵌套', link: '/zh/nested/' }
        ],
        algolia: {},
        sidebar: {
          '/zh/': [/* ... */],
          '/zh/nested/': [/* ... */]
        }
      }
    }
  }
}

(4) markdown配置

themeConfig节点里面设置markdown相关信息。

选项 写法示例 作用
lineNumbers lineNumbers: true, 是否在每个代码块的左侧显示行号,true为显示
anchor 默认值:{ permalink: true, permalinkBefore: true, permalinkSymbol: '#' } markdown-it-anchor 的选项。
toc 默认值: { includeLevel: [2, 3] } markdown-it-table-of-contents 的选项。
扩展项 示例代码:config: md => {md.set({ breaks: true }) md.use(require('markdown-it-xxx'))} 用于修改当前的 markdown-it 实例的默认配置,或者应用额外的插件的函数,

举例如下:

module.exports = {
  markdown: {
    // 显示行号
    lineNumbers: true, 
    anchor: {
      // 标题头有一个¶图标
      permalink: true,
      level: 1,
      // permalinkSymbol: '&#187;'
      permalinkSymbol: '&#x00BB;'
    },
    toc: {
      // 包含的层级
      includeLevel: [1, 2, 3],
      // true表示在TOC中呈现所有标题
      forceFullToc: true
    }
    config: md => {
      md.set({ breaks: true })
      md.use(require('markdown-it-xxx'))
    }
  }
}

(5) 搜索框

a.内置搜索

通过设置 themeConfig.search: false 来禁用默认的搜索框,或是通过 themeConfig.searchMaxSuggestions 来调整默认搜索框显示的搜索结果数量,如下所示:

module.exports = {
  themeConfig: {
    search: false,
    searchMaxSuggestions: 10
  }
}

::: tip 注意事项:
内置搜索只会为页面的标题、h2h3 构建搜索索引,如果你需要全文搜索,你可以使用 Algolia 搜索
:::

b.Algolia搜索

通过 themeConfig.algolia 选项来用 Algolia 搜索 替换内置的搜索框。要启用 Algolia 搜索,你需要至少提供 apiKeyindexName,如下所示:

module.exports = {
  themeConfig: {
    algolia: {
      apiKey: '<API_KEY>',
      indexName: '<INDEX_NAME>'
    }
  }
}

(6) 最后更新时间

通过 themeConfig.lastUpdated 选项来获取每个文件最后一次 git 提交的 UNIX 时间戳(ms),同时它将以合适的日期格式显示在每一页的底部。themeConfig.lastUpdated 默认是关闭的,如果给定一个字符串,它将会作为前缀显示(默认值是:Last Updated)。具体配置如下:

module.exports = {
  themeConfig: {
    lastUpdated: 'Last Updated', // string | boolean
  }
}

注意:
由于 lastUpdated 是基于 git 的, 所以你只能在一个基于 git 的项目中启用它。

(7) 上 / 下一篇链接

可以通过 YAML front matter 来设置上 / 下一篇链接。

(8) Git 仓库和编辑链接

当你提供了 themeConfig.repo 选项,将会自动在每个页面的导航栏生成生成一个 GitHub 链接,以及在页面的底部生成一个 "Edit this page" 链接。

module.exports = {
  themeConfig: {
    // 假定是 GitHub. 同时也可以是一个完整的 GitLab URL
    repo: "https://github.com/AweiLoveAndroid/AweiLoveAndroid.github.io/tree/master/vuepress_usage",
    // 自定义仓库链接文字。默认从 `themeConfig.repo` 中自动推断为
    // "GitHub"/"GitLab"/"Bitbucket" 其中之一,或是 "Source"。
    repoLabel: '查看源码',

    // 以下为可选的编辑链接选项

    // 假如你的文档仓库和项目本身不在一个仓库:
    docsRepo: 'vuejs/vuepress',
    // 假如文档不是放在仓库的根目录下:
    docsDir: 'docs',
    // 假如文档放在一个特定的分支下:
    docsBranch: 'master',
    // 默认是 false, 设置为 true 来启用
    editLinks: true,
    // 默认为 "Edit this page"
    editLinkText: '帮助我们改善此页面!'
  }
}

(9) PWA支持

  • VuePress默认支持PWA配置,需要在themeConfig中开启serviceWorker。如下所示:
module.exports = {
     serviceWorker: true,
}
  • 然后添加icons和Manifest配置,在public中添加manifest.json配置和图标。可以点击PWA配置查看相关资料。
  • 最后在config.js 配置中添加·manifest.json·:
module.exports = {
    head: [
      ['link', { rel: 'manifest', href: '/manifest.json' }],
    ]
}

可以通过 YAML front matter 来设置是否指定页面的编辑链接。

(三)manifest.json配置

路径为:hello_vuepress/docs/.vuepress/public/manifest.json

{
    "name": "lzw",
    "short_name": "lzw",
    "start_url": "index.html",
    "display": "standalone",
    "background_color": "#2196f3",
    "description": "阿韦的博客",
    "theme_color": "blue",
    "icons": [
      {
        "src": "./favicon.png",
        "sizes": "144x144",
        "type": "image/png"
      }
    ],
    // 配置PWA  用不到PWA的可以不用管它
    // "related_applications": [
    //   {
    //     "platform": "web"
    //   },
    //   {
    //     "platform": "play",
    //     "url": "https://play.google.com/store/apps/details?id=cheeaun.hackerweb"
    //   }
    // ]
  }

七、部署

(一)在config.js里面设置正确的路径。

base: “/vuepress_usage/", 这里的base就是我们要部署的路径,它的默认值是/。如果发布到 https://用户名.github.io/,则可以省略这一步。如果发布到https://用户名.github.io/二级路径,则将base设置成二级路径。例如:
发布到http://aweiloveandroid.github.io/vuepress_usage这个路径,我只要填写/vuepress_usage/即可。

注意:前后都要带上/,不然会报错。

(二)在项目根路径,创建一个deploy.sh 脚本文件,如下所示:

请根据你想要提交的网址进行修改。

#!/usr/bin/env sh

# 确保脚本抛出遇到的错误
set -e

# 生成静态文件
npm run docs:build

# 进入生成的文件夹
cd docs/.vuepress/dist

# 如果是发布到自定义域名
# echo 'www.example.com' > CNAME

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

# 如果发布到 https://<USERNAME>.github.io
# git push -f git@github.com:<USERNAME>/<USERNAME>.github.io.git master

# 如果发布到 https://<USERNAME>.github.io/<REPO>
# git push -f git@github.com:<USERNAME>/<REPO>.git master:gh-pages

cd -

八、遇到的一些错误

1.无法使用touch命令

解决:使用命令行npm install touch-cli -g就可以了。

2.官网说的slidebar多个侧边栏,我怎么都配置不好,可能是一个坑吧。


本文参考:https://vuepress.vuejs.org/zh/guide/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343