一、使用过程中遇到的问题
1. 使用scss
- npm install -D node-sass sass-loader
 - 启动报错,高版本的node-sass,sass-loader与 vuepress 版本并不兼容,可行的版本是:node-sass@4.14.1,sass-loader@7.3.1。
 
2. 引入组件库
以element-ui为例
- npm install element-ui
 - 使用enhanceApp.js
 
// 示例
export default ({
  Vue, // VuePress 正在使用的 Vue 构造函数
  options, // 附加到根实例的一些选项
  router, // 当前应用的路由实例
  siteData // 站点元数据
}) => {
  // ...做一些其他的应用级别的优化
}
// 使用
// docs/.vuepress/enhanceApp.js
import Element from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
export default ({ Vue, options, router }) => {
  Vue.use(Element);
};
- 上面引入组件库后打包报错:window is not defined
info
vuepress是如何工作的:
- 一个 VuePress 网站是一个由 Vue、Vue Router和 webpack 驱动的单页应用。
 - 在构建时,vuepress会为应用创建一个服务端渲染(SSR)的版本,然后通过虚拟访问每一条路径来渲染对应的HTML。
 
 
import 'element-ui/lib/theme-chalk/index.css';
export default async ({ Vue, options, router, isServer }) => {
  if (!isServer) { // 客户端
    let Element = await import('element-ui');
    Vue.use(Element.default);
  }
}
// 使用async-await,避免异步加载第三方依赖包,导致页面渲染会出错
- 引入组件库后启动报错:Cannot find module 'core-js/library/fn/xxx/xxx'
原因应该是 UI 组件中依赖的core-js包和 vuepress 所依赖的core-js包版本不兼容造成的。
 
// 配置chainWebpack解决该问题
// docs/.vuepress/config.js
chainWebpack: config => {
  config.resolve.alias.set('core-js/library/fn', 'core-js/features')
},
二、主题theme
info
- vuepress的入口文件为主题的Layout.vue
 - 想自定义主题则新建docs/.vuepress/theme/layouts/Layout.vue
 
1. 继承主题
假设你想创建一个继承自 VuePress 默认主题的派生主题,你只需要在你的主题配置中配置 extend 选项:
// .vuepress/theme/index.js
module.exports = {
  extend: '@vuepress/theme-default'
}
2. 组件覆盖
- 父主题的所有能力都会"传递"给子主题,对于文件级别的约定,子主题可以通过在同样的位置创建同名文件来覆盖它
 - 子主题可以通过
@theme 别名访问父主题的组件,比如:当子主题中有Navbar.vue时,如下: 
theme
└── components
    └── Navbar.vue
info
@theme/components/Navbar.vue 会自动地映射到子主题中的 Navbar 组件,当子主题移除这个组件时,@theme/components/Navbar.vue 又会自动恢复为父主题中的 Navbar 组件。