对vuepress的认识
前言
还是和昨天写vuepress-theme-vdoing使用体验一样。在边尝试VuePress +Gitee 快速搭建个人博客边写博客的过程中,引出了我对vuepress的认识,而且越写越多,所以干脆也单独拎出来写一章。我复制了其中的vuepress认识,让这篇博客写得更加连贯。
记录的主体内容有三部分:我接触vuepress的过程、vuepress官网摘要、vuepress-theme-vdoing官网摘要。
文章目录
- 对vuepress的认识
- 前言
- 重新认识vuepress
- 使用vuepress的过程
- vuepress理论基础摘要
- 基础
- 设计理念
- 插件
- 主题
- vuepress基础内容的总结
- 认识vuepress-theme-vdoing的摘要
- 基础
- vuepress-theme-vdoing的高级操作
- vdoing配置
- 总结
重新认识vuepress
其实我对vuepress项目感兴趣是因为我用过WordPress。看到这个vuepress的名字的时候我就下意识的认为这是一个使用vue框架的CMS。碰巧我不怎么喜欢WordPress,对vue十分有好感。所以昨天就看了看GitHub上的vuepress-theme-vdoing。还写了vuepress-theme-vdoing使用体验、我对博客网站的认识——wsdchong。
今天早上看到VuePress +Gitee 快速搭建个人博客,于是打算尝试一下vuepress,在尝试的过程中查找资料,我在CSDN的链接中还找到了vuepress-theme-antdocs和vuepress-creator的作者。我还以为他是vue-theme-vdoing的作者,但是他们的GitHub不同。最后我在vuepress-theme-vdoing的文档库中发现原来还有个vuepress。兜兜转转最后找到了组织。
vuepress:vue驱动的静态网站生成器。以markdown为中心的项目结构,以最少的配置帮助你专注写作。
使用vuepress的过程
既然可以运行又可以部署,那么就可以尝试修改内容了。
我准备尝试的部分是修改。
首先是预期效果。首先参考三个人的博客:Evan’s blog、lingze’s blog、restlessMan。
Evan’s blog:是vuepress-theme-vdoing的作者。
lingze’s blog:是vuepress-theme-vdoing的使用者。内容精简。
restlessMan:是我参考的那篇文章的vuepress博客。
然后是参考文档。一个是vuepress的官方文档,一个是vuepress-theme-vdoing的文档
vuepress:源头。官方文档更系统准确。
vuepress-theme-vdoing:一个好的使用者。个人文档更便于理解思考。
等我理解文档的意思后,归纳总结关注点。
vuepress理论基础摘要
基础
vuepress的介绍
- 简洁。以 Markdown 为中心的项目结构,以最少的配置帮助你专注于写作。
- vue驱动。享受 Vue + webpack 的开发体验,可以在 Markdown 中使用 Vue 组件,又可以使用 Vue 来开发自定义主题。
- 高性能。VuePress 会为每个页面预渲染生成静态的 HTML,同时,每个页面被加载的时候,将作为 SPA 运行。
vuepress的基本使用
vuepress的介绍
VuePress 由两部分组成:第一部分是一个极简静态网站生成器,它包含由 Vue 驱动的主题系统和插件 API,另一个部分是为书写技术文档而优化的默认主题
每一个由 VuePress 生成的页面都带有预渲染好的 HTML,也因此具有非常好的加载性能和搜索引擎优化(SEO)。这也是每个网站最重要的两点,首先不要卡,然后便于被搜索到。
一旦页面被加载,Vue 将接管这些静态内容,并将其转换成一个完整的单页应用(SPA),其他的页面则会只在用户浏览到的时候才按需加载。这样既节约资源,又响应快。用户体验棒。
vue的工作原理
事实上,一个 VuePress 网站是一个由 Vue、Vue Router 和 webpack 驱动的单页应用。
在构建时,vuepress会为应用创建一个服务端渲染(SSR)的版本,然后通过虚拟访问每一条路径来渲染对应的HTML。
vuepress的优势
对比Nuxt:VuePress 能做的事情,Nuxt 理论上确实能够胜任,但 Nuxt 是为构建应用程序而生的,而 VuePress 则专注在以内容为中心的静态网站上,同时提供了一些为技术文档定制的开箱即用的特性。
对比Hexo:Hexo 最大的问题在于他的主题系统太过于静态以及过度地依赖纯字符串。Markdown 渲染的配置也不是最灵活的。
vuepress的目录结构(docs/.vuepress)
-
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
: 配置文件的入口文件,也可以是 YML
或 toml
。-
docs/.vuepress/enhanceApp.js
: 客户端应用的增强。
vuepress的基本配置
- 配置文件:所有vuepress相关的文件都将放在.vuepress文件夹。一个 VuePress 网站必要的配置文件是
.vuepress/config.js
- 主题配置:一个 VuePress 主题应该负责整个网站的布局和交互细节。在 VuePress 中,目前自带了一个默认的主题,它是为技术文档而设计的。同时,默认主题提供了一些选项,让你可以去自定义导航栏(navbar)、 侧边栏(sidebar)和 首页(homepage) 等,详情请参见 默认主题 。
- 应用级别配置:由于 VuePress 是一个标准的 Vue 应用,你可以通过创建一个
.vuepress/enhanceApp.js
文件来做一些应用级别的配置,当该文件存在的时候,会被导入到应用内部。
vuepress的markdown拓展
- header anchors:所有的标题将会自动地应用 anchor 链接,anchor 的渲染可以通过 markdown.anchor 来配置。
- 链接:网站内部的链接,将会被转换成 `` 用于 SPA 导航。VuePress 支持重定向到干净链接。外部的链接将会被自动地设置。
- Front Matter:在markdown开头的三条虚线之间,可以设置预定义变量。如title、lang、description、layout、meta等。
在Markdown中使用vue
浏览器的API访问显示
模块语法
使用组件
使用预处理器
脚本和样式提取
内置组件
vuepress的多语言支持
在
.vuepress/config.js
中提供 locales
选项中设置
vuepress的部署
有许多部署方式。
- 文档放置在项目的
docs
目录中;- 使用的是默认的构建输出位置;
- VuePress 以本地依赖的形式被安装到你的项目中
- 在
docs/.vuepress/config.js
中设置正确的 base
。- 创建一个如下的
deploy.sh
文件
vuepress的进阶内容
我暂时省略。
Front Matter:front matter 必须是 markdown 文件中的第一部分,并且必须采用在三点划线之间书写的有效的 YAML。
永久链接:一个永久链接是一个旨在未来很多年里维持不变的 URL,由此产生一个发生链接失效(link rot1)的可能性较小的超链接。
markdown插槽:VuePress 实现了一套针对 Markdown 的内容分发 API。通过这个特性,你可以将你的文档分割成多个片段,以便于在布局组件中灵活组合。
全局计算属性:在 VuePress 中,内置了一些核心的计算属性,以供默认主题 或自定义主题使用。如page、lang、title、themeConfig
vuepress的配置
基本配置:base、title、description、head、host、port、temp、dest、locales、shouldPrefetch、cache;
styling:palette.styl对默认预设的样式进行简单的替换;index.styl中可以添加额外样式。
主题:theme用于指定主题、themeConfig用于配置主题;
Pluggable:plugins插件
Markdown:anchor、toc、plugins;
构建流程:postcss、stylus、scss、sass、less、configureWebpack、chainWebpack。
浏览器兼容性:evergreen
设计理念
VuePress 1.x 的设计理念主要体现在:插件化、约定大于配置、合理的优先级管理。
插件化:可以解耦。在过去,当我们遇到一些不太常见的需求时,我们会有一些疑虑:如果我们打算不支持,VuePress 的使用场景也就受到了限制;但如果想要支持它,我们就必须将其写到核心代码库中,并为其单独开设配置的 API。对于维护者来说,除了不利于长久的维护,这有时也会让我们心力交瘁。而解决办法就是插件。
约定大于配置:VuePress 1.0 开始引入一些约定,以减少用户过多的配置压力。对于这一点,最直观的体现是对文档目录结构和主题目录结构的约定。
合理的优先级管理:主题开发者和普通的文档用户都具有定义全局的
palette
、style
、templates
和 plugins
的能力。通过设计合理的优先级管理使得它们可以协同工作。
插件
使用插件的目的:使项目尽可能简洁。
使用插件、开发插件、插件的生命周期、option API和Context API我就不赘述了。主要介绍几个常用的官方插件
@vuepress/plugin-active-header-links:页面滚动时自动激活侧边栏链接的插件
back-to-top:顾名思义。回到顶部。
plugin-blog:分类系统让vuepress快速贴文分类、分页功能、客户端API。
plugin-search:用于headers的搜索插件。
除了这些还可以根据Plugins API自己开发插件。
主题
使用主题
使用一个主题和使用一个插件的方式几乎一致。
开发主题
首先在根目录创建一个.vuepress/theme目录,然后创建Layout.vue文件。
获取渲染内容:
.md
文件渲染的内容,可以作为一个独特的全局组件 `` 来使用内容摘抄: markdown 文件中有一个 注释,该注释之前的内容会被抓取并暴露在
$page.excerpt
属性中。目录结构:随着需求的变化,只有一个布局组件
Layout.vue
可能还不够,你可能想要定义更多的布局组件用于不同的页面
-
theme/global-components
: 该目录下的组件都会被自动注册为全局组件。想了解更多,请参考 @vuepress/plugin-register-components。-
theme/components
: Vue 组件。-
theme/layouts
: 布局组件,其中 Layout.vue
是必需的。-
theme/styles
: 全局的样式和调色板。-
theme/templates
: 修改默认的模板文件。-
theme/index.js
: 主题文件的入口文件。-
theme/enhanceApp.js
: 主题水平的客户端增强文件。布局组件
使用插件
网站和页面的元数据:
Layout
组件将会对每一个文档目录下的 .md
执行一次,同时,整个网站以及特定页面的元数据将分别暴露为 this.$site
和 this.$page
属性,它们将会被注入到每一个当前应用的组件中。应用配置
主题的配置
plugins
DevTemplate:dev 模式下使用的 HTML 模板路径,默认模板见 这里
SSRTemplate:build 模式下使用的 HTML 模板路径,默认模板见 这里。
extend:VuePress 支持一个主题继承于另一个主题。
globalLayout:全局布局组件是负责管理全局布局方案的一个组件
默认主题配置
首页:认的主题提供了一个首页(Homepage)的布局
导航栏:导航栏可能包含你的页面标题、搜索框、 导航栏链接、多语言切换、仓库链接,它们均取决于你的配置。
侧边栏:想要使 侧边栏(Sidebar)生效,需要配置
themeConfig.sidebar
搜索栏:通过
themeConfig.searchMaxSuggestions
来调整默认搜索框显示的搜索结果数量最后更新时间:可以通过
themeConfig.lastUpdated
选项来获取每个文件最后一次 git
提交的 UNIX 时间戳(ms),同时它将以合适的日期格式显示在每一页的底部上/下一篇链接:自动地根据当前页面的侧边栏的顺序来获取。
git仓库和编辑链接
页面滚动:通过
themeConfig.smoothScroll
选项来启用页面滚动效果。
博客主题
安装:npm install @vuepress/theme-blog -D
使用:
// .vuepress/config.js module.exports = { theme: '@vuepress/blog', themeConfig: { // 请参考文档来查看所有可用的选项。 } }
vuepress基础内容的总结
明白vuepress的定位:一个静态网站生成器。优势是简洁、vue驱动、高性能。
明白vuepress的结构:第一部分是静态网站生成器,另一部分是默认主题docs。
明白vuepress的设计理念:插件化
明白vuepress的目录结构docs/.vuepress和基本配置
明白vuepress的插件和主题
明白vuepress的使用、vuepress主题的使用、vuepress的部署。
vuepress的部署
- 文档放置在项目的
docs
目录中;- 使用的是默认的构建输出位置;
- VuePress 以本地依赖的形式被安装到你的项目中
- 在
docs/.vuepress/config.js
中设置正确的 base
。- 创建一个如下的
deploy.sh
文件
学习使用vuepress,可以提高我直接用vue开发网站的效率。
学习vuepress-theme-vdoing,可以提高我配置vuepress主题的效率。
毕竟自己从头开始做一个vue框架的静态网站生成器要花费很大精力,而且不一定做得好;从头设计一个vuepress主题也要花很大精力,并且也不一定做得美观。新手期的时候借用别人的轮子可能开发出更好的产品。
认识vuepress-theme-vdoing的摘要
基础
vdoing介绍和特性:
Vdoing是VuePress的一个主题,是在默认主题基础上做的修改和扩展,很多配置仍然沿用官方配置。
特性:结构化(自动生成侧边栏、目录页、索引页、面包屑等,构建一个结构化知识库)、碎片化和个性化(博客功能)
vdoing相比于默认主题,添加的功能内容有:
管理学习笔记和技术文档:
自动生成结构化侧边栏
、自动生成front matter
、目录页
、扩展的搜索框插件
、面包屑
、快捷翻页按钮
;博客相关:
文章信息栏(作者与创建时间)
、最近更新栏
、博主信息栏
、页脚版权栏
、分类功能+分类页
、标签功能+标签页
、归档页
、评论插件
;多种颜色模式供用户选择:
跟随系统
、浅色模式
、深色模式
、阅读模式
提高搬砖效率的辅助工具:
批量操作front matter工具
方便好用的
Markdown 容器
。
vdoing快速上手
vdoing目录结构
-
docs
文件夹名称请不要修改-
docs/.vuepress
用于存放全局的配置、样式、静态资源等,同官方,查看 详情目录结构-
docs/@pages
此文件夹是自动生成的,存放分类页、标签页、归档页对应的.md
文件,一般不需要改动-
docs/_posts
专门用于存放碎片化博客文章,里面的.md
文件不需要遵循命名约定,不会生成结构化侧边栏和目录页。-
docs/<结构化目录>
请查看《构建结构化站点的核心配置和约定》。-
docs/index.md
首页-
theme-vdoing
存放在本地的vdoing主题文件,如果你想深度的修改主题,首先要在docs/.vuepress/config.js
中配置使用的主题指向这个文件。
vdoing遵循“约定优于配置”.
构建一个结构化的站点,需要遵循下面这些约定,约定可以为你省去很多配置,轻松拥有一个结构清晰的站点。
在
config.js
中有如下配置// config.js module.exports = { themeConfig: { sidebar: 'structuring' // 'structuring' | { mode: 'structuring', collapsable: Boolean} | 'auto' | 自定义 } }
在运行开发服务
npm run dev
或打包npm run build
时主题内部将会按照目录约定自动生成一个结构化的侧边栏、目录页、面包屑等数据。在源目录(一般是
docs
)文件夹中,除了.vuepress
、@pages
、_posts
、index.md 或 README.md
之外的文件夹将会为其生成对应的侧边栏。生成的顺序取自序号,名称取自文件夹(文件)名。
vdoing自动生成front matter
当你没有给
.md
文件的front matter指定标题(title)、时间(date)、永久链接(permalink)、分类(categories)、标签(tags)时,在运行开发服务npm run dev
或打包npm run build
时将自动为你生成这些数据,你也可以自己手动设置这些数据,当你手动设置之后,相应的数据就不会再自动生成
vdoing的markdown容器
提示框容器
布局容器
普通卡片列表
图文卡片列表
vuepress-theme-vdoing的高级操作
批量操作front matter工具:使得博客在build后自动生成front matter;
自动部署:可以一键部署到GitHub pages和Coding Pages上;用npm run deploy即可一键部署。
评论模块的搭建:使用Gitalk实现静态博客无后台评论系统。弥补了静态网页不能交互的缺点。
图床:GitHub + jsDelivr + TinyPNG+ PicGo 打造稳定快速、高效免费图床。GItHub上存图片、jsDelivr免费CDN加速、PicGo做图床、TinyPNG压缩上传的图片。简直是一条龙服务。
百度收录:GitHub Actions 定时运行代码:每天定时百度链接推送。让自己的博客被推广。
在线编辑:前提是把博客源码上传到github仓库,并配置好 GitHub Actions 自动部署。配置好之后,每个文章页面底下都会有一个编辑按钮,点击即可跳到github在线编辑,编辑完成后提交就会自动触发GitHub Actions自动部署。
幸运的是这些功能都集成到vdoing中(我猜的,之前不是说这个vdoing主题和默认主题新增了内容)。
vdoing配置
主题配置:category、tag、archive、sidebar等
首页配置:bannerBg、features、postList
front matter配置:sidebar、article、comment等
目录页配置
添加摘要:文章摘要会显示于首页的详细版文章列表中,在编写文章时(
.md
文件中)在合适的位置添加一个``注释。注释前面的内容将会暴露在摘要中。修改主题颜色和样式
总结
看到这差不多了解了vuepress和vuepress-theme-vdoing。接下来我也准备尝试使用vuepress-theme-vdoing。
最后分析一下使用过程。
我原本是写《VuePress+Gitee快速搭建个人博客的尝试》。现在准备把这个收个尾,然后另起炉灶,实现vuepress+coding/GitHub;因为vdoing的官方文档上说用cdoing方便被百度收录。另外自动部署、在线编辑等功能依赖于GitHub Action,所以有必要另外写一篇《vuepress-theme-vdoing使用过程记录》
在《vuepress-theme-vdoing使用过程记录》中,第一步是安装下载vuepress;第二步是部署GitHub Pages和Coding Pages;第三步是使用使用vdoing主题并部署;第四步是实现博客+技术文章;
前三步大概没问题,第四步可能再做修改。
第四步想实现lingze’s blog的效果。