时间:2021-05-08
官网 :https://vuepress.vuejs.org/zh/

快速上手

前提条件 VuePress 需要 Node.js (opens new window)>= 8.6

1.安装vuepress

yarn add -D vuepress # npm install -D vuepress

2.创建你的第一篇文档

mkdir docs && echo '# Hello VuePress' > docs/README.md

3.在 package.json 中添加 scripts

  1. {
  2. "scripts": {
  3. "docs:dev": "vuepress dev docs",
  4. "docs:build": "vuepress build docs"
  5. }
  6. }

4.在本地启动服务器

yarn docs:dev # npm run docs:dev

VuePress 会在 http://localhost:8080启动一个热重载的开发服务器。

目录结构

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

默认的页面路由

文件的相对路径 页面路由地址
/README.md /
/guide/README.md /guide/
/guide/config.md /guide/config.html

主题配置

首页

默认的主题提供了一个首页(Homepage)的布局 (用于 这个网站的主页)。想要使用它,需要在你的根级 README.md 中指定 home: true。以下是一个如何使用的例子:

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

更多配置项

导航栏

导航栏可能包含你的页面标题、搜索框导航栏链接多语言切换仓库链接,它们均取决于你的配置。

导航栏 Logo

  1. // .vuepress/config.js
  2. module.exports = {
  3. themeConfig: {
  4. logo: '/assets/img/logo.png',
  5. }
  6. }

导航栏链接

  1. // .vuepress/config.js
  2. module.exports = {
  3. themeConfig: {
  4. nav: [
  5. { text: 'Home', link: '/' },
  6. { text: 'Guide', link: '/guide/' },
  7. { text: 'External', link: 'https://google.com' },
  8. { text: 'test', link: 'test', target:'_self', rel:'' }
  9. ]
  10. }
  11. }

设置分组

  1. // .vuepress/config.js
  2. module.exports = {
  3. themeConfig: {
  4. nav: [
  5. {
  6. text: 'Languages',
  7. items: [
  8. { text: 'Chinese', link: '/language/chinese/' },
  9. { text: 'Japanese', link: '/language/japanese/' }
  10. ]
  11. }
  12. ]
  13. }
  14. }

侧边栏

想要使 侧边栏(Sidebar)生效,需要配置 themeConfig.sidebar,基本的配置,需要一个包含了多个链接的数组:

  1. // .vuepress/config.js
  2. module.exports = {
  3. themeConfig: {
  4. sidebar: [
  5. '/',
  6. '/page-a',
  7. ['/page-b', 'Explicit link text']
  8. ]
  9. }
  10. }

省略 .md 拓展名,同时以 / 结尾的路径将会被视为 */README.md,这个链接的文字将会被自动获取到

嵌套的标题链接

默认情况下,侧边栏会自动地显示由当前页面的标题(headers)组成的链接,并按照页面本身的结构进行嵌套,你可以通过 themeConfig.sidebarDepth 来修改它的行为。默认的深度是 1,它将提取到 h2 的标题,设置成 0 将会禁用标题(headers)链接,同时,最大的深度为 2,它将同时提取 h2h3 标题。

显示所有页面的标题链接

  1. // .vuepress/config.js
  2. module.exports = {
  3. themeConfig: {
  4. displayAllHeaders: true // 默认值:false
  5. }
  6. }

活动的标题链接

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

  1. // .vuepress/config.js
  2. module.exports = {
  3. themeConfig: {
  4. activeHeaderLinks: false, // 默认值:true
  5. }
  6. }

侧边栏分组

  1. // .vuepress/config.js
  2. module.exports = {
  3. themeConfig: {
  4. sidebar: [
  5. {
  6. title: 'Group 1', // 必要的
  7. path: '/foo/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在
  8. collapsable: false, // 可选的, 默认值是 true,
  9. sidebarDepth: 1, // 可选的, 默认值是 1
  10. children: [
  11. '/'
  12. ]
  13. },
  14. {
  15. title: 'Group 2',
  16. children: [ /* ... */ ],
  17. initialOpenGroupIndex: -1 // 可选的, 默认值是 0
  18. }
  19. ]
  20. }
  21. }

侧边栏的每个子组默认是可折叠的,你可以设置 collapsable: false 来让一个组永远都是展开状态。

多个侧边栏

  1. .
  2. ├─ README.md
  3. ├─ contact.md
  4. ├─ about.md
  5. ├─ foo/
  6. ├─ README.md
  7. ├─ one.md
  8. └─ two.md
  9. └─ bar/
  10. ├─ README.md
  11. ├─ three.md
  12. └─ four.md

注意 确保 fallback 侧边栏被最后定义。VuePress 会按顺序遍历侧边栏配置来寻找匹配的配置

搜索框

内置搜索

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

  1. // .vuepress/config.js
  2. module.exports = {
  3. themeConfig: {
  4. search: false,
  5. searchMaxSuggestions: 10
  6. }
  7. }

最后更新时间

你可以通过 themeConfig.lastUpdated 选项来获取每个文件最后一次 git 提交的 UNIX 时间戳(ms),同时它将以合适的日期格式显示在每一页的底部:

  1. // .vuepress/config.js
  2. module.exports = {
  3. themeConfig: {
  4. lastUpdated: 'Last Updated', // string | boolean
  5. }
  6. }

上 / 下一篇链接

上一篇和下一篇文章的链接将会自动地根据当前页面的侧边栏的顺序来获取。
你可以通过 themeConfig.nextLinksthemeConfig.prevLinks 来全局禁用它们:

  1. // .vuepress/config.js
  2. module.exports = {
  3. themeConfig: {
  4. // 默认值是 true 。设置为 false 来禁用所有页面的 下一篇 链接
  5. nextLinks: false,
  6. // 默认值是 true 。设置为 false 来禁用所有页面的 上一篇 链接
  7. prevLinks: false
  8. }
  9. }

Git 仓库和编辑链接

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

  1. // .vuepress/config.js
  2. module.exports = {
  3. themeConfig: {
  4. // 假定是 GitHub. 同时也可以是一个完整的 GitLab URL
  5. repo: 'vuejs/vuepress',
  6. // 自定义仓库链接文字。默认从 `themeConfig.repo` 中自动推断为
  7. // "GitHub"/"GitLab"/"Bitbucket" 其中之一,或是 "Source"。
  8. repoLabel: '查看源码',
  9. // 以下为可选的编辑链接选项
  10. // 假如你的文档仓库和项目本身不在一个仓库:
  11. docsRepo: 'vuejs/vuepress',
  12. // 假如文档不是放在仓库的根目录下:
  13. docsDir: 'docs',
  14. // 假如文档放在一个特定的分支下:
  15. docsBranch: 'master',
  16. // 默认是 false, 设置为 true 来启用
  17. editLinks: true,
  18. // 默认为 "Edit this page"
  19. editLinkText: '帮助我们改善此页面!'
  20. }
  21. }

静态资源

静态资源都存放在public文件下

图片的使用

  1. <img :src="$withBase('/frontend/prototype-chains.jpg')" alt="prototype-chains">

logo

  1. // .vuepress/config.js
  2. module.exports = {
  3. themeConfig: {
  4. logo: '/logo.png',
  5. }
  6. }

首页logo

  1. // README.md
  2. ---
  3. heroImage: /app.png
  4. ---

Markdown扩展

Front Mater

YMAL front mater语法

Emoji

你可以在这个列表 找到所有可用的 Emoji。

自定义容器

  1. ::: tip
  2. 这是一个提示
  3. :::
  4. ::: warning
  5. 这是一个警告
  6. :::
  7. ::: danger
  8. 这是一个危险警告
  9. :::
  10. ::: details
  11. 这是一个详情块,在 IE / Edge 中不生效
  12. :::

你也可以自定义块中的标题:

  1. ::: danger STOP
  2. 危险区域,禁止通行
  3. :::
  4. ::: details 点击查看代码
  5. ```js
  6. console.log('你好,VuePress!')

:::

  1. <a name="WCmRU"></a>
  2. ### 代码块中的语法高亮
  3. VuePress 使用了 [Prism ](https://prismjs.com/)来为 markdown 中的代码块实现语法高亮。Prism 支持大量的编程语言,你需要做的只是在代码块的开始倒勾中附加一个有效的语言别名:
  1. export default {
  2. name: 'MyComponent',
  3. // ...
  4. }
  1. Prism 的网站上查看 [合法的语言列表](https://prismjs.com/#languages-list)。
  2. <a name="3PnKj"></a>
  3. ### 代码块中的行高亮

``` js {4} export default { data () { return { msg: ‘Highlighted!’ } } }

  1. ```
  2. 除了单行以外,你也可指定多行,行数区间,或是两者都指定。
  3. - 行数区间: 例如 `{5-8}`, `{3-10}`, `{10-17}`
  4. - 多个单行: 例如 `{4,7,9}`
  5. - 行数区间与多个单行: 例如 `{4,7-13,16,23-27,40}`
  6. <a name="Y2wqZ"></a>
  7. ###
  8. <a name="QyoU4"></a>
  9. ### 行号

// config.js module.exports = { markdown: { lineNumbers: true } }

  1. <a name="5GwV2"></a>
  2. ### 导入代码段

<<< @/docs/.vuepress/code/test.js

  1. <a name="nKZYo"></a>
  2. ###
  3. <a name="EaUCu"></a>
  4. ### 使用vue组件
  5. 所有在 `.vuepress/components` 中找到的 `*.vue` 文件将会自动地被注册为全局的异步组件,如:

. └─ .vuepress └─ components ├─ demo-1.vue ├─ OtherComponent.vue └─ Foo └─ Bar.vue

  1. 你可以直接使用这些组件在任意的 Markdown 文件中(组件名是通过文件名取到的):

  1. <a name="GUblg"></a>
  2. ## 插件
  3. <a name="4s80r"></a>
  4. ### [<br />@vuepress/plugin-back-to-top](https://github.com/vuejs/vuepress/tree/master/packages/@vuepress/plugin-back-to-top)
  5. 安装

yarn add -D @vuepress/plugin-back-to-top

OR npm install -D @vuepress/plugin-back-to-top

  1. 使用

module.exports = { plugins: [‘@vuepress/back-to-top’] }

  1. <a name="jhOS6"></a>
  2. ## 构建与部署
  3. Github Pages 是面向用户、组织和项目开放的公共静态页面搭建托管服务,站点可以被免费托管在 Github 上,你可以选择使用 Github Pages 默 认提供的域名 github.io 或者自定义域名来发布站点。不仅免除了租服务器的麻烦,而且部署起来非常轻松。简而言之,在GitHub Pages上发布博客是非常好的选择。
  4. 首先创建两个仓库
  5. 1、amjanney.github.io,站点仓库,用来存放打包后的文件。<br />2、docs,用来放vuepress写的文档。
  6. github.io会默认读取根目录下的index.html作为首页。所以我们要做的就是把打包后的vuepress文档上传到创建的名为`<username>.github.io`的仓库下。<br />创建仓库<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/338969/1627642861311-b719ef13-79bc-4a4d-92a3-af2e6ef54192.png#height=261&id=X6ifP&margin=%5Bobject%20Object%5D&name=image.png&originHeight=522&originWidth=1890&originalType=binary&ratio=1&size=134915&status=done&style=none&width=945)<br />仓库地址:
  7. [https://github.com/amjanney/amjanney.github.io](https://github.com/amjanney/amjanney.github.io)<br />[https://github.com/amjanney/docs](https://github.com/amjanney/docs)
  8. 发布:<br />在docs下面有个deploy.sh文件,代码如下:
  9. ```shell
  10. #!/usr/bin/env sh
  11. # 确保脚本抛出遇到的错误
  12. set -e
  13. # 生成静态文件
  14. npm run docs:build
  15. # 进入生成的文件夹
  16. cd docs/.vuepress/dist
  17. # 如果是发布到自定义域名
  18. # echo 'www.example.com' > CNAME
  19. git init
  20. git add -A
  21. git commit -m 'deploy'
  22. # 如果发布到 https://amjanney.github.io
  23. git push -f https://github.com/amjanney/amjanney.github.io.git master

在package.json文件中配置命令

  1. "deploy": "bash deploy.sh"

运行
npm run deploy
会执行deploy.sh中的命令,先打包vuepress文件,在docs/.vuepress/dist下面打包后的文件,cd到这个文件下面,通过git在上传到amjanney.github.io.git仓库,这时候访问https://amjanney.github.io/,文档就已经生效了。

每次更改了文件,就需要执行npm run deploy命令,更新文档。

当然这个过程可以集成一下,每次push代码到master的时候,自动出发npm run deploy过程。

更多部署方式移步链接