官网装修 - 文档页
[toc]
创建更多路由
分别创建介绍、安装和开始使用导航对应的组件
router.ts
- 路由路径一般小写,横杠链接
- 组件一般大写
|
|
高亮当前路由 router active class
- 高亮当前路由(模糊匹配)
- 使用
vue-router
选中任意路由时自动添加的router-link-active
类可以精确匹配router-link-active
标记当前选中的类router-link-exact-active
链接精准激活时,匹配选中项的类
- 选择给
router-link-exact-active
类添加样式
|
|
引入 Github 的 Markdown 样式
填充文档内容
Intro.vue
|
|
Install.vue
|
|
GetStarted.vue
|
|
使用
github-markdown-css
为代码添加样式
- 安装
yarn add github-markdown-css
- 在
main.ts
中引入import 'github-markdown-css';
- 黑暗模式
github-markdown-css/github-markdown-dark.css
- 明亮模式
github-markdown-css/github-markdown-light.css
- 黑暗模式
- 在容器的标签上添加类
class="markdown-body"
这样写比较麻烦,考虑直接使用
*.md
文件,转化为HTML标签,插入js文件中
添加支持 import markdown 文件
直接引入 Markdown 文件需要 ** Vite 插件 **
- 可以 自制 Vite 插件
- 或者使用
vite-plugin-md
自制Vite 插件
- Vite在开发项目时没有使用任何打包工具,使用浏览器自带的能力
- 浏览器不支持引入
*.md
文件,但支持引入*.js
文件 - 将
*.md
文件转译为*.js
文件,然后引入浏览器
新建目录与文件
plugins/md.ts
|
|
- 由于
md.ts
引用了marked
,需要安装yarn add --dev marked
在
vite.config.ts
中调用md.ts
|
|
正式版vite已经不支持此种写法了,所以可以使用官方推荐的插件
vite-plugin-md
使用vite-plugin-md
解释一下 md.ts
- 用于开发 KOA
- 添加加载
*.md
文件为*.js
文件的功能 - 导出一个字符串
export default "<h1>..."
- 添加加载
- 用于 rollup 插件
- 对 .md文件进行编译
- 使用
mdToJs()
方法将*.md
转译为js代码
事不过三,消除重复
Don’t Repeat Yourself
|
|
三个组件的结构一致,可以用一个组件来代替
- 新建组件
src/view/Markdown.vue
- 将导入语句的路径作为参数,参数数据由外界传入
props: {path: {type: String, required: true}}
- 在
setup() {}
中动态异步地引入import(props.path)
,异步请求文件- 使用 顶层 await
- await 的表达式会自动编译成在 await 之后保留当前组件实例上下文的格式。
``
|
|
你的代码有什么缺点
- 不支持SSR
展示源代码
优化demo展示
SwitchDemo.vue
|
|
- demo分为四个部分
- 标题
h2
- 展示的组件
<VueSwitch />
- 切换按钮
<VueButton />
- 组件的源码
<div class="demo-code"><pre>...
- 标题
展示抽离的源代码,方便拷贝
|
|
使用vue-loader
的Custom Blocks
功能处理自定义标签
以
switch1demo.vue
为例
|
|
写一个vite2.0插件
vueCompAddSourceCodeTitleFromCustomBlock.ts
- 处理自定义标签
<demo></demo>
- vite 1.x 迁移 自定义块转换
transform(code, id)
中的id
其实所解析到的文件的 url- 使用正则匹配
/vue&type=demo/.test(id)
- 去除多余的查询参数得到该文件路径
const path = id.replace(`?vue&type=demo&index=0&lang.demo`,'');
- 按路径读取文件内容
const fileString = fs.readFileSync(path).toString();
- 找出
<demo></demo>
标签节点,并且得到文本const parsed = baseParse(fileString).children.find(n => n.tag === 'demo');
const title = parsed.children[0].content;
- 得到代码主体
const main = fileString.split(parsed.loc.source).join('').trim();
- 给组件附加属性
Component.__sourceCode = ${JSON.stringify(main)}
Component.__sourceCodeTitle = ${JSON.stringify(title)}
- 在模板字符串中返回 方法
return `export default function (Component) { Component.__sourceCode = ${JSON.stringify(main)} Component.__sourceCodeTitle = ${JSON.stringify(title)} }`.trim();
|
|
配置
vite.config.ts
|
|
参考
小优化:使用 <component :is=""/>
五彩斑斓的源代码
使用
pismjs
为显示的源代码加样式
- 安装
yarn add pismjs
- 安装
yarn add @types/prismjs -D
- 在需要显示源代码的组件中引入
import * as Prism from 'prismjs';
,使用全局下的window.Prism
- 不能使用
import 'pismjs'
- 不能使用
import default from 'pismjs'
- 不能使用
- 样式
import 'prismjs/themes/prism-okaidia.css';
- 在
env.d.ts
中声明模块类型declare module 'prismjs';
pismjs
将每行代码字符串外都包裹一层span,加上相应的样式- 加背景色
<pre class="language-html" v-html="Prism.highlight(Switch1demo.__sourceCode, Prism.languages.html, 'html')"></pre>
神奇的封装:Demo 组件
事不过三 封装
<Demo component="x"/>
组件 简化代码
|
|
使用mitt
main.ts
|
|
App.vue
|
|