vuepress入门笔记

1,600 阅读6分钟

背景介绍

每一个公司都拥有组件库或者各种各样的前端工具,对于这些工具的使用,拥有一篇高质量的技术文档是一个非常不错的选择。像饿了么ui组件库,vue文档等那样,清晰简明大方,可以让团队的人节省更多的一个学习成本。由此,尤大大发明了一个神奇的宝贝-----vuepress

我们都知道,程序员写文档很注重md语法,越来越多的工具也给予md语法来创造更多实用的工具。就掘金而言,掘金的文档编写也是通过md语法来编写。本文不介绍md语法的内容,md语法可以通过这个链接学习markdown

vuepress介绍

VuePress 由两部分组成:第一部分是一个极简静态网站生成器,它包含由 Vue 驱动的主题系统插件 API,另一个部分是为书写技术文档而优化的默认主题,它的诞生初衷是为了支持 Vue 及其子项目的文档需求。

每一个由 VuePress 生成的页面都带有预渲染好的 HTML,也因此具有非常好的加载性能和搜索引擎优化(SEO)。同时,一旦页面被加载,Vue 将接管这些静态内容,并将其转换成一个完整的单页应用(SPA),其他的页面则会只在用户浏览到的时候才按需加载

事实上,一个 VuePress 网站是一个由 VueVue Router和 webpack驱动的单页应用。如果你以前使用过 Vue 的话,当你在开发一个自定义主题的时候,你会感受到非常熟悉的开发体验,你甚至可以使用 Vue DevTools 去调试你的自定义主题

vuepress是基于md语法来编写文档,但你也可以在md文件使用vue的写法,比如加入html标签包裹,注意留有空行才能显示,加入script标签写js逻辑,加入style标签写css样式

创建vuepress

全局安装VuePress

yarn global add vuepress 
# 或者:npm install -g vuepress

新建文件夹

可以手动右键新建,也可以使用下面的命令新建文件夹:

mkdir project

项目初始化

进入到project文件夹中,使用命令行初始化项目:

yarn init -y 
# 或者 npm init -y

将会创建一个package.json文件,长这样子:

{
  "name": "project",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

在project的根目录下新建docs文件夹:

这个文档将作为项目文档的根目录来使用:

mkdir docs

在docs文件夹下创建.vuepress文件夹:

mkdir .vuepress

所有 VuePress 相关的文件都将会被放在这里

.vuepress文件夹下面创建config.js:

touch config.js

config.js是VuePress必要的配置文件,它导出一个javascript对象。

你可以先加入如下配置:

module.exports = {
  title: 'Hello VuePress',
  description: 'Just playing around'
}

.vuepress文件夹下面创建public文件夹:

mkdir public

这个文件夹是用来放置静态资源的,打包出来之后会放在.vuepress/dist/的根目录。

首页(像VuePress文档主页一样)

在docs文件夹下面创建一个README.md

默认的主题提供了一个首页,像下面一样设置home:true即可,可以把下面的设置放入README.md中,待会儿你将会看到跟VuePress一样的主页。

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

ps:你需要放一张图片到public文件夹中。

我们的项目结构已经搭好了:

project
├─── docs
│   ├── README.md
│   └── .vuepress
│       ├── public
│       └── config.js
└── package.json

package.json 里添加两个启动命令:

{
  "scripts": {
    "docs:dev": "vuepress dev docs",
    "docs:build": "vuepress build docs"
  }
}

启动你的VuePress:

默认是localhost:8080端口。

yarn docs:dev
# 或者:npm run docs:dev

构建:

build生成静态的HTML文件,默认会在 .vuepress/dist 文件夹下

yarn docs:build 
# 或者:npm run docs:build

基本配置:

最标准的当然是官方文档,可以自己的需求来配置config.js

可以参考一下下面的配置:

module.exports = {
  title: '网站标题',
  description: '网站描述',
  // 注入到当前页面的 HTML <head> 中的标签
  head: [
    ['link', { rel: 'icon', href: '/favicon.ico' }], // 增加一个自定义d的favicon(网页标签的图标)
  ],
  base: '/web_accumulate/', // 这是部署到github相关的配置 下面会讲
  markdown: {
    lineNumbers: true // 代码块显示行号
  },
  themeConfig: {
    sidebarDepth: 2, // e'b将同时提取markdown中h2 和 h3 标题,显示在侧边栏上。
    lastUpdated: 'Last Updated' // 文档更新时间:每个文件git最后提交的时间
  }
};

导航栏配置:

module.exports = {
  themeConfig: {
    nav:[
      { text: '前端算法', link: '/algorithm/' }, // 内部链接 以docs为根目录
      { text: '博客', link: 'http://obkoro1.com/' }, // 外部链接
      // 下拉列表
      {
        text: 'GitHub',
        items: [
          { text: 'GitHub地址', link: 'https://github.com/OBKoro1' },
          {
            text: '算法仓库',
            link: 'https://github.com/OBKoro1/Brush_algorithm'
          }
        ]
      }        
    ]
  }
}

侧边栏配置:

module.exports = {
  themeConfig: {
      sidebar:{
        // docs文件夹下面的accumulate文件夹 文档中md文件 书写的位置(命名随意)
        '/accumulate/': [
            '/accumulate/', // accumulate文件夹的README.md 不是下拉框形式
            {
              title: '侧边栏下拉框的标题1',
              children: [
                '/accumulate/JS/test', // 以docs为根目录来查找文件 
                // 上面地址查找的是:docs>accumulate>JS>test.md 文件
                // 自动加.md 每个子选项的标题 是该md文件中的第一个h1/h2/h3标题
              ]
            }
          ],
          // docs文件夹下面的algorithm文件夹 这是第二组侧边栏 跟第一组侧边栏没关系
          '/algorithm/': [
            '/algorithm/', 
            {
              title: '第二组侧边栏下拉框的标题1',
              children: [
                '/algorithm/simple/test' 
              ]
            }
          ]
      }
  }
}

当然你也可以从github上搜索并下载某个大神的配置,这里制作简单基础的配置介绍

  • 安装最新版的vuepress是基于vue3的基础框架,当然你可以使用vue2的语法也可以使用vue3的语法

FAQ

  • 在自己编写文档时需要使用到其他vue插件,使用低版本的vuepress创建enhanchApp.js文件来配置导入全局应用配置,没有效果? 最新版的vuepress中导入其他第三方插件的方式与vuepress低版本有所不同,可以通过配置config文件中的一个api-----clientAppEnhanceFiles来配置,在config配置文件同级下创建clientAppEnhance.ts文件,在这个文件里面可以配置一些全局应用配置,比如设置vue全局属性或者引入vue插件等
//// clientAppEnhance.ts

import { defineClientAppEnhance } from '@vuepress/client';

export default defineClientAppEnhance(({ app, router, siteData }) => {
    // VueClipboard.config.autoSetContainer = true
})
///// config.js

import { resolve } from 'path'

module.exports = {
  clientAppEnhanceFiles: path.resolve(__dirname, './clientAppEnhance.ts')
}