vuepress是什么?
快速开始
环境要求:Node.js v14.18.0+
这个部分文档也都有就是这么简单
# 步骤 1: 创建并进入一个新目录
mkdir vuepress-starter
cd vuepress-starter
# 步骤 2: 初始化项目
git init
npm init
# 步骤3: 安装依赖
npm install -D vuepress@next
# 步骤 4: 在 package.json 中添加一些 scripts
{
"scripts": {
"docs:dev": "vuepress dev docs",
"docs:build": "vuepress build docs"
}
}
# 步骤 5: 将默认的临时目录和缓存目录添加到 .gitignore 文件中
echo 'node_modules' >> .gitignore
echo '.temp' >> .gitignore
echo '.cache' >> .gitignore
# 创建你的第一篇文档
mkdir docs
echo '# Hello VuePress' > docs/README.md
# 步骤 7: 在本地启动服务器来开发你的文档网站
npm run docs:dev
好叻!雏形有啦,来深入配置看看,让你的文档看起来更加优雅!!
文件目录结构说明
.
├── README.md
├── dist ---------------------------------- 打包后文件
├── docs ---------------------------------- vue组件和相关文档说明(docs是可以自定义的哦)
│ ├── .vuepress
│ ├── ├── components -------------------- vue组件
│ ├── ├── ├── Button.vue -------------------- vue组件
│ ├── ├── ├── Form
│ ├── ├── ├── ├── Basic.vue -------------------- vue组件
│ ├── ├── public ------------------------ 静态文件夹
│ ├── ├── styles ------------------------ 全局样式文件 可以在这里修改主题
│ ├── ├── client.ts --------------------- 客户端配置文件 建议用`.ts`能够得到更好提示
│ ├── ├── config.ts --------------------- 配置文件
│ ├── README.md
│ └── framework ------------------------- 你的所有文档`framework`也是可以自定义的
│ ├── components
│ │ ├── button.md
│ │ ├── form
│ │ │ ├── api.md
│ │ │ └── index.md
│ └── guide
│ ├── changelog.md
│ ├── instroduction.md
├── package-lock.json
├── package.json
└── tsconfig.json
深入配置
以下提供最常用的配置及说明,其他自己看文档去。😡
config.ts 配置文件
// config.ts配置文件
// 配置文件
import { defaultTheme, defineUserConfig } from 'vuepress'
import { registerComponentsPlugin } from '@vuepress/plugin-register-components'
import { path, getDirname } from '@vuepress/utils'
const __dirname = getDirname(import.meta.url)
export default defineUserConfig({
// 语言 默认是en-US
lang: 'zh-CN',
// 标题
title: '织女UI',
description: 'WEBUI组件库',
// 基础路径
base: '/',
// 渲染在HTML <head>标签内的额外内容
head: [
[
'link',
{
rel: 'icon',
href: '/logo.png',
},
],
],
// dev配置项 指定开发服务器的主机名
host: '0.0.0.0',
// 指定开发服务器的端口默认8080
port: 9003,
// 指定vuepress build命令的输出目录
dest: './dist',
// 自定义主题配置
theme: defaultTheme({
// 导航栏配置
navbar: [
{ text: '主页', link: '/' },
{ text: '指南', link: '/framework/guide/development.md' },
{ text: '组件', link: '/framework/components/button.md' },
],
// 侧边栏
sidebar: [
{
text: '开始',
collapsible: true,
children: [
{ text: '快速开始', link: '/framework/guide/instroduction.md' },
{ text: '更新日志', link: '/framework/guide/changelog.md' }
],
},
{
text: '基础',
collapsible: true,
children: [{ text: 'Button按钮', link: '/framework/components/button.md' }],
},
{
text: '输入',
collapsible: true,
children: [
{
text: 'Form表单',
link: '/framework/components/form/index.md',
collapsible: true,
children: [{ text: 'API', link: '/framework/components/form/api.md' }],
},
],
},
sidebarDepth: 3,
}),
plugins: [
// vue 组件全局注册,注册后的组件在markdown中既可以直接以标签方式渲染
// 如以上目录结构中<Button/>渲染 ;嵌套文件则是<Form-Basic/>这种方式
registerComponentsPlugin({
componentsDir: path.resolve(__dirname, './components'),
}),
]
})
client.ts客户端配置
一个基础的客户端配置文件是这样的
import { defineClientConfig } from '@vuepress/client'
export default defineClientConfig({
enhance({ app, router, siteData }) {},
setup() {},
rootComponents: [],
})
bug日志
1、SSR相关
一、现象
解决及原因
这是由于VuePress 会在构建过程中生成一个 SSR 应用,用以对页面进行预渲染。一般而言,如果一段代码在客户端应用 Mount 之前就使用了浏览器或 DOM API ,我们就认为其对 SSR 不友好,即不支持 SSR 。
官方提供两种方式解决:
-
ClientOnly 组件来包裹不支持 SSR 的内容。而当前是引人第三方vue组件库,在库中使用到了DOM API
-
在 enhance 函数中,你可以使用 VUEPRESS_SSR 标记来处理这种情况。
// 客户端配置文件client.ts中
import { defineClientConfig } from '@vuepress/client'
import '@fzhx/znui/dist/style.css'
export default defineClientConfig({
async enhance({ app, router, siteData }) {
if (!__VUEPRESS_SSR__) {
// __VUEPRESS_SSR__标识当前是否运行在服务端渲染 (SSR) 环境下,这个判断一定要用
const znui = await import('@fzhx/znui')
app.use(znui.default)
}
},
setup() {},
rootComponents: [],
})
二、现象
1.2、解决及原因
ssr相关enhance增强已配置但仍出现,定位到错误位置如上图。于是乎查看源码。比对不同版本区别(1.0.5之前打包ok, 升级到1.0.8出现)
谁成想竟然是因为tdesign源码导致的😷
v1.0.8时打包出现如上错误,估计是isUndefined相关问题
v1.0.5 以及v1.0.9 是相同的 说明1.0.8发现问题后官方偷偷修改了。不想说了😂
vuepress2.0 vs vuepress1.0
-
如果你的项目是vue3.0开发的建议vuepress2.0能够得到更好的体验
-
如果你的项目是vue2.0开发的建议用vuepress1.0
不同1: vuepress1.0中的SSR
在.vuepress/enhanceApp.js文件中进行处理
// import elementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
export default ({ Vue, options, router, siteData }) => {
// Vue.use(elementUI)
/**
* 以下写法解决:build时,node.js没有document问题
*/
Vue.mixin({
mounted() {
import(elementUI).then(function (m) {
Vue.use(m.default)
})
},
})
}
不同2: .vuepress/components/** 中组件会自定注册为全局组件
不同3: config.js主题配置方式
module.exports = {
themeConfig: {
//导航栏
nav: [
{ text: '主页', link: '/' },
{ text: '指南', link: '/framework/guide/development.md' },
{ text: '组件', link: '/framework/comp/file-preview.md' },
],
//侧边栏
sidebar: [
{
title: '开发指南',
collapsable: true,
children: [
['/framework/guide/changelog.md', '更新日志'],
['/framework/guide/browser.md', '浏览器兼容性']
},
{
title: '基础组件',
collapsable: true,
sidebarDepth: 2,
children: [
['/framework/comp/button.md', 'Button按钮'],
],
},
],
}
}