From c18cdd201099da1b689d1bb7fba5dc8e45337c3e Mon Sep 17 00:00:00 2001 From: xugaoyi <894072666@qq.com> Date: Tue, 10 Mar 2020 20:29:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/.vuepress/config/sidebar-auto.js | 22 ++++----- docs/.vuepress/config/sidebar.js | 2 +- .../enhanced-search/EnhancedSearchBox.vue | 3 +- docs/.vuepress/plugins/love-me/love-me.js | 4 +- docs/.vuepress/theme/components/Catalogue.vue | 48 +++++++++++++++++++ docs/.vuepress/theme/components/Page.vue | 12 ++++- .../10.学习笔记/00.《JavaScript教程》笔记.md | 16 +++++-- docs/about/01.关于.md | 2 +- docs/index.md | 2 +- utils/sidebar.js | 8 +++- 10 files changed, 93 insertions(+), 26 deletions(-) create mode 100644 docs/.vuepress/theme/components/Catalogue.vue diff --git a/docs/.vuepress/config/sidebar-auto.js b/docs/.vuepress/config/sidebar-auto.js index b86b9c0..1d508a0 100644 --- a/docs/.vuepress/config/sidebar-auto.js +++ b/docs/.vuepress/config/sidebar-auto.js @@ -1,25 +1,25 @@ -// 侧边栏自动生成 +// 侧边栏自动生成 // 最里面的数组,格式:[, , <permalink>],其中permalink并非侧边栏所需,而是提供给其他页面使用 module.exports = { - "/01.前端/": [{"title":"学习笔记","collapsable":false,"children":[["10.学习笔记/00.《JavaScript教程》笔记.md","《JavaScript教程》笔记"],["10.学习笔记/10.《ES6 教程》笔记.md","《ES6 教程》笔记"],["10.学习笔记/20.《Vue》笔记.md","《Vue》笔记"],["10.学习笔记/30.《TypeScript 从零实现 axios》.md","《TypeScript 从零实现 axios》"],["10.学习笔记/40.小程序笔记.md","小程序笔记"]]},{"title":"JavaScript文章","collapsable":false,"children":[["25.JavaScript文章/02.new命令原理.md","new命令原理"],["25.JavaScript文章/03.ES5面向对象.md","ES5面向对象"],["25.JavaScript文章/04.ES6面向对象.md","ES6面向对象"],["25.JavaScript文章/06.多种数组去重性能对比.md","多种数组去重性能对比"],["25.JavaScript文章/50.JS随机打乱数组.md","JS随机打乱数组"],["25.JavaScript文章/60.判断是否为移动端浏览器.md","判断是否为移动端浏览器"],["25.JavaScript文章/70.将一维数组按指定长度转为二维数组.md","将一维数组按指定长度转为二维数组"],["25.JavaScript文章/80.防抖与节流函数.md","防抖与节流函数"],["25.JavaScript文章/90.JS获取和修改url参数.md","JS获取和修改url参数"]]},{"title":"Vue文章","collapsable":false,"children":[["30.Vue文章/10.Vue项目开发前的一些准备工作.md","Vue项目开发前的一些准备工作"],["30.Vue文章/20.Vue CLi3 修改webpack配置.md","Vue CLi3 修改webpack配置"],["30.Vue文章/30.Vue中的scoped和scoped穿透.md","Vue中的scoped和scoped穿透"],["30.Vue文章/40.Vue项目使用mock数据的几种方式.md","Vue项目使用mock数据的几种方式"]]}], + "/01.前端/": [{"title":"学习笔记","collapsable":false,"children":[["10.学习笔记/00.《JavaScript教程》笔记.md","《JavaScript教程》笔记","/pages/b002833e252f5727"],["10.学习笔记/10.《ES6 教程》笔记.md","《ES6 教程》笔记","/pages/5966e7c94628d277"],["10.学习笔记/20.《Vue》笔记.md","《Vue》笔记","/pages/830b1fea836eee46"],["10.学习笔记/30.《TypeScript 从零实现 axios》.md","《TypeScript 从零实现 axios》","/pages/943193f9d25bc5fb"],["10.学习笔记/40.小程序笔记.md","小程序笔记","/pages/236ec09c26876b59"]]},{"title":"JavaScript文章","collapsable":false,"children":[["25.JavaScript文章/02.new命令原理.md","new命令原理","/pages/8143cc480faf9a11"],["25.JavaScript文章/03.ES5面向对象.md","ES5面向对象","/pages/b1af5cb8996363c5"],["25.JavaScript文章/04.ES6面向对象.md","ES6面向对象","/pages/1f4123be6f45abcd"],["25.JavaScript文章/06.多种数组去重性能对比.md","多种数组去重性能对比","/pages/e808fba1fa8fbab2"],["25.JavaScript文章/50.JS随机打乱数组.md","JS随机打乱数组","/pages/40b4db2d38ba85f2"],["25.JavaScript文章/60.判断是否为移动端浏览器.md","判断是否为移动端浏览器","/pages/40f623be692cf8bc"],["25.JavaScript文章/70.将一维数组按指定长度转为二维数组.md","将一维数组按指定长度转为二维数组","/pages/f1acb712033ac8da"],["25.JavaScript文章/80.防抖与节流函数.md","防抖与节流函数","/pages/0f6a0ac99b62ede5"],["25.JavaScript文章/90.JS获取和修改url参数.md","JS获取和修改url参数","/pages/7a91be2d502346ce"]]},{"title":"Vue文章","collapsable":false,"children":[["30.Vue文章/10.Vue项目开发前的一些准备工作.md","Vue项目开发前的一些准备工作","/pages/802a1ca6f7b71c59"],["30.Vue文章/20.Vue CLi3 修改webpack配置.md","Vue CLi3 修改webpack配置","/pages/5d463fbdb172d43b"],["30.Vue文章/30.Vue中的scoped和scoped穿透.md","Vue中的scoped和scoped穿透","/pages/c80d2751cf1f4268"],["30.Vue文章/40.Vue项目使用mock数据的几种方式.md","Vue项目使用mock数据的几种方式","/pages/bd1af2f75fd361fc"]]}], - "/02.页面/": [{"title":"HTML","collapsable":false,"children":[["10.HTML/10.常用meta整理.md","常用meta整理"]]},{"title":"CSS","collapsable":false,"children":[["20.CSS/01.flex布局语法.md","flex布局语法"],["20.CSS/02.flex布局案例-基础.md","flex布局案例-基础"],["20.CSS/03.flex布局案例-骰子.md","flex布局案例-骰子"],["20.CSS/04.flex布局案例-圣杯布局.md","flex布局案例-圣杯布局"],["20.CSS/05.flex布局案例-网格布局.md","flex布局案例-网格布局"],["20.CSS/06.flex布局案例-输入框布局.md","flex布局案例-输入框布局"],["20.CSS/07.CSS3之transform过渡.md","CSS3之transform过渡"],["20.CSS/08.CSS3之animation动画.md","CSS3之animation动画"],["20.CSS/20.「布局技巧」图片未加载前自动撑开元素高度.md","「布局技巧」图片未加载前自动撑开元素高度"],["20.CSS/30.文字在一行或两行时超出显示省略号.md","文字在一行或两行时超出显示省略号"],["20.CSS/35.从box-sizing属性入手,了解盒子模型.md","从box-sizing属性入手,了解盒子模型"]]},{"title":"stylus","collapsable":false,"children":[["25.stylus/10.混入(Mixins).md","混入(Mixins)"]]}], + "/02.页面/": [{"title":"HTML","collapsable":false,"children":[["10.HTML/10.常用meta整理.md","常用meta整理","/pages/8309a5b876fc95e3"]]},{"title":"CSS","collapsable":false,"children":[["20.CSS/01.flex布局语法.md","flex布局语法","/pages/0a83b083bdf257cb"],["20.CSS/02.flex布局案例-基础.md","flex布局案例-基础","/pages/ea6db1530c42ad51"],["20.CSS/03.flex布局案例-骰子.md","flex布局案例-骰子","/pages/eff61bc8b4f4695d"],["20.CSS/04.flex布局案例-圣杯布局.md","flex布局案例-圣杯布局","/pages/df9e7c7214fa5046"],["20.CSS/05.flex布局案例-网格布局.md","flex布局案例-网格布局","/pages/85b5a3fe218a34b7"],["20.CSS/06.flex布局案例-输入框布局.md","flex布局案例-输入框布局","/pages/05cc577fb51c7998"],["20.CSS/07.CSS3之transform过渡.md","CSS3之transform过渡","/pages/02d7f59d98d87409"],["20.CSS/08.CSS3之animation动画.md","CSS3之animation动画","/pages/c2c0432138f6e042"],["20.CSS/20.「布局技巧」图片未加载前自动撑开元素高度.md","「布局技巧」图片未加载前自动撑开元素高度","/pages/3d52574260725aea"],["20.CSS/30.文字在一行或两行时超出显示省略号.md","文字在一行或两行时超出显示省略号","/pages/42b66999cc27dc25"],["20.CSS/35.从box-sizing属性入手,了解盒子模型.md","从box-sizing属性入手,了解盒子模型","/pages/20a978023139589d"]]},{"title":"stylus","collapsable":false,"children":[["25.stylus/10.混入(Mixins).md","混入(Mixins)","/pages/9f15c1a281d8bedb"]]}], - "/03.技术/": [{"title":"技术文档","collapsable":false,"children":[["01.技术文档/01.Git使用手册.md","Git使用手册"],["01.技术文档/02.Markdown使用教程.md","Markdown使用教程"],["01.技术文档/03.npm常用命令.md","npm常用命令"],["01.技术文档/04.yaml语言教程.md","yaml语言教程"]]},{"title":"GitHub技巧","collapsable":false,"children":[["02.GitHub技巧/01.GitHub高级搜索技巧.md","GitHub高级搜索技巧"],["02.GitHub技巧/02.GitHub Actions 实现自动部署静态博客.md","GitHub Actions 实现自动部署静态博客"],["02.GitHub技巧/03.GitHub Actions 定时运行代码:每天定时百度链接推送.md","GitHub Actions 定时运行代码:每天定时百度链接推送"],["02.GitHub技巧/10.GitHub加速下载项目的方法.md","GitHub加速下载项目的方法"]]},{"title":"Nodejs","collapsable":false,"children":[["03.Nodejs/01.nodejs递归读取所有文件.md","nodejs递归读取所有文件"]]},{"title":"博客搭建","collapsable":false,"children":[["04.博客搭建/01.解决百度无法收录搭建在GitHub上的个人博客的问题.md","解决百度无法收录搭建在GitHub上的个人博客的问题"],["04.博客搭建/02.使用Gitalk实现静态博客无后台评论系统.md","使用Gitalk实现静态博客无后台评论系统"],["04.博客搭建/03.GitHub + jsDelivr + TinyPNG+ PicGo 打造稳定快速、高效免费图床.md","GitHub + jsDelivr + TinyPNG+ PicGo 打造稳定快速、高效免费图床"]]}], + "/03.技术/": [{"title":"技术文档","collapsable":false,"children":[["01.技术文档/01.Git使用手册.md","Git使用手册","/pages/9a7ee40fc232253e"],["01.技术文档/02.Markdown使用教程.md","Markdown使用教程","/pages/ad247c4332211551"],["01.技术文档/03.npm常用命令.md","npm常用命令","/pages/61f2f95fd7da14fd"],["01.技术文档/04.yaml语言教程.md","yaml语言教程","/pages/4e8444e2d534d14f"]]},{"title":"GitHub技巧","collapsable":false,"children":[["02.GitHub技巧/01.GitHub高级搜索技巧.md","GitHub高级搜索技巧","/pages/4c778760be26d8b3"],["02.GitHub技巧/02.GitHub Actions 实现自动部署静态博客.md","GitHub Actions 实现自动部署静态博客","/pages/6b9d359ec5aa5019"],["02.GitHub技巧/03.GitHub Actions 定时运行代码:每天定时百度链接推送.md","GitHub Actions 定时运行代码:每天定时百度链接推送","/pages/f44d2f9ad04ab8d3"],["02.GitHub技巧/10.GitHub加速下载项目的方法.md","GitHub加速下载项目的方法","/pages/95331c6a9613faf8"]]},{"title":"Nodejs","collapsable":false,"children":[["03.Nodejs/01.nodejs递归读取所有文件.md","nodejs递归读取所有文件","/pages/117708e0af7f0bd9"]]},{"title":"博客搭建","collapsable":false,"children":[["04.博客搭建/01.解决百度无法收录搭建在GitHub上的个人博客的问题.md","解决百度无法收录搭建在GitHub上的个人博客的问题","/pages/41f87d890d0a02af"],["04.博客搭建/02.使用Gitalk实现静态博客无后台评论系统.md","使用Gitalk实现静态博客无后台评论系统","/pages/1da0bf9a988eafe5"],["04.博客搭建/03.GitHub + jsDelivr + TinyPNG+ PicGo 打造稳定快速、高效免费图床.md","GitHub + jsDelivr + TinyPNG+ PicGo 打造稳定快速、高效免费图床","/pages/a5f73af5185fdf0a"]]}], - "/04.更多/": [{"title":"学习","collapsable":false,"children":[["01.学习/02.提高学习效率的策略.md","提高学习效率的策略"],["01.学习/03.提高记忆的技巧.md","提高记忆的技巧"],["01.学习/04.自律小建议.md","自律小建议"],["01.学习/05.处理问题的思路.md","处理问题的思路"]]},{"title":"面试","collapsable":false,"children":[["03.面试/01.面试问题集锦.md","面试问题集锦"]]},{"title":"英语","collapsable":false,"children":[["04.英语/01.英语基础.md","英语基础"]]},{"title":"心情杂货","collapsable":false,"children":[["05.心情杂货/01.一个完美主义者的自我救赎.md","一个完美主义者的自我救赎"]]},["97.学习网站.md","学习网站"],["98.在线工具.md","在线工具"],["99.友情链接.md","友情链接"]], + "/04.更多/": [{"title":"学习","collapsable":false,"children":[["01.学习/02.提高学习效率的策略.md","提高学习效率的策略","/pages/a8692ab3bdcb4588"],["01.学习/03.提高记忆的技巧.md","提高记忆的技巧","/pages/996822b2a2ca6e3b"],["01.学习/04.自律小建议.md","自律小建议","/pages/c3f302a03c8daf79"],["01.学习/05.处理问题的思路.md","处理问题的思路","/pages/9ba2b8fb13de1957"]]},{"title":"面试","collapsable":false,"children":[["03.面试/01.面试问题集锦.md","面试问题集锦","/pages/aea6571b7a8bae86"]]},{"title":"英语","collapsable":false,"children":[["04.英语/01.英语基础.md","英语基础","/pages/6f9525eecdd51d5a"]]},{"title":"心情杂货","collapsable":false,"children":[["05.心情杂货/01.一个完美主义者的自我救赎.md","一个完美主义者的自我救赎","/pages/2d615df9a36a98ed"]]},["97.学习网站.md","学习网站","/pages/2e9ba3fa6e1ed0e9"],["98.在线工具.md","在线工具","/pages/9c2232288caaa8ec"],["99.友情链接.md","友情链接","/pages/844eea1b2387fb96"]], - "/about/": [["01.关于.md","关于"]], + "/about/": [["01.关于.md","关于","/about"]], - "/timeline/": [["01.时间轴.md","时间轴"]], + "/timeline/": [["01.时间轴.md","时间轴","/timeline"]], - "/《ES6 教程》笔记/": [{"title":"《ES6 教程》笔记","collapsable":false,"children":[]},["01.ECMAScript 6 简介.md","ECMAScript 6 简介"],["02.let 和 const 命令.md","let 和 const 命令"],["03.变量的解构赋值.md","变量的解构赋值"],["04.字符串的扩展.md","字符串的扩展"],["05.字符串的新增方法.md","字符串的新增方法"],["06.正则的扩展.md","正则的扩展"],["07.数值的扩展.md","数值的扩展"],["08.函数的扩展.md","函数的扩展"],["09.数组的扩展.md","数组的扩展"],["10.对象的扩展.md","对象的扩展"],["11.对象的新增方法.md","对象的新增方法"],["12.Symbol.md","Symbol"],["13.Set 和 Map 数据结构.md","Set 和 Map 数据结构"],["14.Proxy.md","Proxy"],["15.Reflect.md","Reflect"],["16.Promise 对象.md","Promise 对象"],["17.Iterator 和 for-of 循环.md","Iterator 和 for-of 循环"],["18.Generator 函数的语法.md","Generator 函数的语法"],["19.Generator 函数的异步应用.md","Generator 函数的异步应用"],["20.async 函数.md","async 函数"],["21.Class 的基本语法.md","Class 的基本语法"],["22.Class 的继承.md","Class 的继承"],["23.Module 的语法.md","Module 的语法"],["24.Module 的加载实现.md","Module 的加载实现"],["25.编程风格.md","编程风格"],["26.读懂 ECMAScript 规格.md","读懂 ECMAScript 规格"],["27.异步遍历器.md","异步遍历器"],["28.ArrayBuffer.md","ArrayBuffer"],["29.最新提案.md","最新提案"],["30.装饰器.md","装饰器"],["31.函数式编程.md","函数式编程"],["32.Mixin.md","Mixin"],["33.SIMD.md","SIMD"],["34.参考链接.md","参考链接"]], + "/《ES6 教程》笔记/": [{"title":"《ES6 教程》笔记","collapsable":false,"children":[]},["01.ECMAScript 6 简介.md","ECMAScript 6 简介","/pages/f344d070a1031ef7"],["02.let 和 const 命令.md","let 和 const 命令","/pages/c1edd70a6b7c7872"],["03.变量的解构赋值.md","变量的解构赋值","/pages/b1ab10a62f7564da"],["04.字符串的扩展.md","字符串的扩展","/pages/ca89eca8adeba5f4"],["05.字符串的新增方法.md","字符串的新增方法","/pages/a650b4a0ebfc9350"],["06.正则的扩展.md","正则的扩展","/pages/0473261a6ab0ee8c"],["07.数值的扩展.md","数值的扩展","/pages/5dfea9a0f2d1a392"],["08.函数的扩展.md","函数的扩展","/pages/8ed309d668b20264"],["09.数组的扩展.md","数组的扩展","/pages/e34009d60d8bc4b2"],["10.对象的扩展.md","对象的扩展","/pages/b5e3e0a0ff6e9c25"],["11.对象的新增方法.md","对象的新增方法","/pages/e85e68947502cf90"],["12.Symbol.md","Symbol","/pages/02c86eb2792f3262"],["13.Set 和 Map 数据结构.md","Set 和 Map 数据结构","/pages/0c21dae358fca16b"],["14.Proxy.md","Proxy","/pages/f56ec2ab97d60483"],["15.Reflect.md","Reflect","/pages/74de3e45e4491e95"],["16.Promise 对象.md","Promise 对象","/pages/2810ae8985e9bd52"],["17.Iterator 和 for-of 循环.md","Iterator 和 for-of 循环","/pages/48df907ad3570f3d"],["18.Generator 函数的语法.md","Generator 函数的语法","/pages/718b48ed9ce0adce"],["19.Generator 函数的异步应用.md","Generator 函数的异步应用","/pages/75af7031eb66847b"],["20.async 函数.md","async 函数","/pages/3777253e65bac487"],["21.Class 的基本语法.md","Class 的基本语法","/pages/e831e1593c82bbe0"],["22.Class 的继承.md","Class 的继承","/pages/83f8c3a0cd87dd83"],["23.Module 的语法.md","Module 的语法","/pages/efe2fb04eb8ac5fb"],["24.Module 的加载实现.md","Module 的加载实现","/pages/a79ca2e64ceae213"],["25.编程风格.md","编程风格","/pages/984bf549204bb266"],["26.读懂 ECMAScript 规格.md","读懂 ECMAScript 规格","/pages/32c35f7651d6e58e"],["27.异步遍历器.md","异步遍历器","/pages/16121351be68691b"],["28.ArrayBuffer.md","ArrayBuffer","/pages/a2ba314746bfdbdd"],["29.最新提案.md","最新提案","/pages/7188882b8d65af1b"],["30.装饰器.md","装饰器","/pages/e97bc1e5626b082c"],["31.函数式编程.md","函数式编程","/pages/1cf50330655efc69"],["32.Mixin.md","Mixin","/pages/6a8e2dc558da1b39"],["33.SIMD.md","SIMD","/pages/8e8f80f69b775a56"],["34.参考链接.md","参考链接","/pages/ea6f3b870f6dab69"]], - "/《JavaScript教程》笔记/": [{"title":"《JavaScript教程》笔记","collapsable":false,"children":[]},["01.基础.md","基础"],["02.内置对象.md","内置对象"],["03.面向对象.md","面向对象"],["04.异步操作.md","异步操作"],["05.DOM.md","DOM"],["06.事件.md","事件"],["07.浏览器模型.md","浏览器模型"]], + "/《JavaScript教程》笔记/": [{"title":"《JavaScript教程》笔记","collapsable":false,"children":[]},["01.基础.md","基础","/pages/0796ba76b4b55368"],["02.内置对象.md","内置对象","/pages/74d2ab3fbfeaaa68"],["03.面向对象.md","面向对象","/pages/659b5af5e2e704e0"],["04.异步操作.md","异步操作","/pages/d61b1cb4cdac1f63"],["05.DOM.md","DOM","/pages/7d961b8030c6099e"],["06.事件.md","事件","/pages/10b2761db5a8e089"],["07.浏览器模型.md","浏览器模型","/pages/bab4930124ad2c10"]], - "/《TypeScript 从零实现 axios》/": [{"title":"《TypeScript 从零实现 axios》","collapsable":false,"children":[]},{"title":"初识 TypeScript","collapsable":false,"children":[["01.初识 TypeScript/01.简介.md","简介"],["01.初识 TypeScript/02.安装 TypeScript.md","安装 TypeScript"],["01.初识 TypeScript/03.编写第一个 TypeScript 程序.md","编写第一个 TypeScript 程序"]]},{"title":"TypeScript 常用语法","collapsable":false,"children":[["02.TypeScript 常用语法/01.基础类型.md","基础类型"],["02.TypeScript 常用语法/02.变量声明.md","变量声明"],["02.TypeScript 常用语法/03.接口.md","接口"],["02.TypeScript 常用语法/04.类.md","类"],["02.TypeScript 常用语法/05.函数.md","函数"],["02.TypeScript 常用语法/06.泛型.md","泛型"],["02.TypeScript 常用语法/07.类型推断.md","类型推断"],["02.TypeScript 常用语法/08.高级类型.md","高级类型"]]},{"title":"ts-axios 项目初始化","collapsable":false,"children":[["03.ts-axios 项目初始化/01.需求分析.md","需求分析"],["03.ts-axios 项目初始化/02.初始化项目.md","初始化项目"],["03.ts-axios 项目初始化/03.编写基础请求代码.md","编写基础请求代码"]]},{"title":"ts-axios 基础功能实现","collapsable":false,"children":[["04.ts-axios 基础功能实现/01.处理请求 url 参数.md","处理请求 url 参数"],["04.ts-axios 基础功能实现/02.处理请求 body 数据.md","处理请求 body 数据"],["04.ts-axios 基础功能实现/03.处理请求 header.md","处理请求 header"],["04.ts-axios 基础功能实现/04.获取响应数据.md","获取响应数据"],["04.ts-axios 基础功能实现/05.处理响应 header.md","处理响应 header"],["04.ts-axios 基础功能实现/06.处理响应 data.md","处理响应 data"]]},{"title":"ts-axios 异常情况处理","collapsable":false,"children":[["05.ts-axios 异常情况处理/01.错误处理.md","错误处理"],["05.ts-axios 异常情况处理/02.错误信息增强.md","错误信息增强"]]},{"title":"ts-axios 接口扩展","collapsable":false,"children":[["06.ts-axios 接口扩展/01.扩展接口.md","扩展接口"],["06.ts-axios 接口扩展/02.axios 函数重载.md","axios 函数重载"],["06.ts-axios 接口扩展/03.响应数据支持泛型.md","响应数据支持泛型"]]},{"title":"ts-axios 拦截器实现","collapsable":false,"children":[["07.ts-axios 拦截器实现/01.拦截器设计与实现.md","拦截器设计与实现"]]},{"title":"ts-axios 配置化实现","collapsable":false,"children":[["08.ts-axios 配置化实现/01.合并配置的设计与实现.md","合并配置的设计与实现"],["08.ts-axios 配置化实现/02.请求和响应配置化.md","请求和响应配置化"],["08.ts-axios 配置化实现/03.扩展 create 静态接口.md","扩展 create 静态接口"]]},{"title":"ts-axios 取消功能实现","collapsable":false,"children":[["09.ts-axios 取消功能实现/01.取消功能的设计与实现.md","取消功能的设计与实现"]]},{"title":"ts-axios 更多功能实现","collapsable":false,"children":[["10.ts-axios 更多功能实现/01.withCredentials.md","withCredentials"],["10.ts-axios 更多功能实现/02.XSRF 防御.md","XSRF 防御"],["10.ts-axios 更多功能实现/03.上传和下载的进度监控.md","上传和下载的进度监控"],["10.ts-axios 更多功能实现/04.HTTP 授权.md","HTTP 授权"],["10.ts-axios 更多功能实现/05.自定义合法状态码.md","自定义合法状态码"],["10.ts-axios 更多功能实现/06.自定义参数序列化.md","自定义参数序列化"],["10.ts-axios 更多功能实现/07.baseURL.md","baseURL"],["10.ts-axios 更多功能实现/08.静态方法扩展.md","静态方法扩展"]]},{"title":"ts-axios 单元测试","collapsable":false,"children":[["11.ts-axios 单元测试/01.前言.md","前言"],["11.ts-axios 单元测试/02.Jest 安装和配置.md","Jest 安装和配置"],["11.ts-axios 单元测试/03.辅助模块单元测试.md","辅助模块单元测试"],["11.ts-axios 单元测试/04.请求模块单元测试.md","请求模块单元测试"],["11.ts-axios 单元测试/05.headers 模块单元测试.md","headers 模块单元测试"],["11.ts-axios 单元测试/06.Axios 实例模块单元测试.md","Axios 实例模块单元测试"],["11.ts-axios 单元测试/07.拦截器模块单元测试.md","拦截器模块单元测试"],["11.ts-axios 单元测试/08.mergeConfig 模块单元测试.md","mergeConfig 模块单元测试"],["11.ts-axios 单元测试/09.请求取消模块单元测试.md","请求取消模块单元测试"],["11.ts-axios 单元测试/10.剩余模块单元测试.md","剩余模块单元测试"]]},{"title":"ts-axios 部署与发布","collapsable":false,"children":[["12.ts-axios 部署与发布/01.ts-axios 编译与发布.md","ts-axios 编译与发布"],["12.ts-axios 部署与发布/02.引用 ts-axios 库.md","引用 ts-axios 库"]]}], + "/《TypeScript 从零实现 axios》/": [{"title":"《TypeScript 从零实现 axios》","collapsable":false,"children":[]},{"title":"初识 TypeScript","collapsable":false,"children":[["01.初识 TypeScript/01.简介.md","简介","/pages/e05dce83e5129785"],["01.初识 TypeScript/02.安装 TypeScript.md","安装 TypeScript","/pages/064e0f7b6b6142c8"],["01.初识 TypeScript/03.编写第一个 TypeScript 程序.md","编写第一个 TypeScript 程序","/pages/c85249f40e7a3517"]]},{"title":"TypeScript 常用语法","collapsable":false,"children":[["02.TypeScript 常用语法/01.基础类型.md","基础类型","/pages/28672e2743bbc3a7"],["02.TypeScript 常用语法/02.变量声明.md","变量声明","/pages/54add7f5cf78088e"],["02.TypeScript 常用语法/03.接口.md","接口","/pages/54ea89b497ec3bb3"],["02.TypeScript 常用语法/04.类.md","类","/pages/fad060bd9a8bfac6"],["02.TypeScript 常用语法/05.函数.md","函数","/pages/870a51ba2a9edfad"],["02.TypeScript 常用语法/06.泛型.md","泛型","/pages/8045759ec4ad3c01"],["02.TypeScript 常用语法/07.类型推断.md","类型推断","/pages/7279420c899c505d"],["02.TypeScript 常用语法/08.高级类型.md","高级类型","/pages/3fb6c2f52ab398e3"]]},{"title":"ts-axios 项目初始化","collapsable":false,"children":[["03.ts-axios 项目初始化/01.需求分析.md","需求分析","/pages/195af93fcc871b8b"],["03.ts-axios 项目初始化/02.初始化项目.md","初始化项目","/pages/6e11ac76475a2b3e"],["03.ts-axios 项目初始化/03.编写基础请求代码.md","编写基础请求代码","/pages/acfe1e0b401fa984"]]},{"title":"ts-axios 基础功能实现","collapsable":false,"children":[["04.ts-axios 基础功能实现/01.处理请求 url 参数.md","处理请求 url 参数","/pages/1313dae575f6dddf"],["04.ts-axios 基础功能实现/02.处理请求 body 数据.md","处理请求 body 数据","/pages/887cd0918e2543d8"],["04.ts-axios 基础功能实现/03.处理请求 header.md","处理请求 header","/pages/35c0ec1bb0b0faaf"],["04.ts-axios 基础功能实现/04.获取响应数据.md","获取响应数据","/pages/a57debe141e1e4f4"],["04.ts-axios 基础功能实现/05.处理响应 header.md","处理响应 header","/pages/927161662ca32c24"],["04.ts-axios 基础功能实现/06.处理响应 data.md","处理响应 data","/pages/922cb4268499dc3f"]]},{"title":"ts-axios 异常情况处理","collapsable":false,"children":[["05.ts-axios 异常情况处理/01.错误处理.md","错误处理","/pages/6a8bef7b98dfdcf9"],["05.ts-axios 异常情况处理/02.错误信息增强.md","错误信息增强","/pages/22d581d8c2860b8a"]]},{"title":"ts-axios 接口扩展","collapsable":false,"children":[["06.ts-axios 接口扩展/01.扩展接口.md","扩展接口","/pages/034e320f4af88bd4"],["06.ts-axios 接口扩展/02.axios 函数重载.md","axios 函数重载","/pages/8af227eae851ec97"],["06.ts-axios 接口扩展/03.响应数据支持泛型.md","响应数据支持泛型","/pages/c4489d0bab02cc0c"]]},{"title":"ts-axios 拦截器实现","collapsable":false,"children":[["07.ts-axios 拦截器实现/01.拦截器设计与实现.md","拦截器设计与实现","/pages/70651900f022f586"]]},{"title":"ts-axios 配置化实现","collapsable":false,"children":[["08.ts-axios 配置化实现/01.合并配置的设计与实现.md","合并配置的设计与实现","/pages/937e4de6b81edeca"],["08.ts-axios 配置化实现/02.请求和响应配置化.md","请求和响应配置化","/pages/f5b627bfebba87fc"],["08.ts-axios 配置化实现/03.扩展 create 静态接口.md","扩展 create 静态接口","/pages/7b49658c26f613bf"]]},{"title":"ts-axios 取消功能实现","collapsable":false,"children":[["09.ts-axios 取消功能实现/01.取消功能的设计与实现.md","取消功能的设计与实现","/pages/fdc6da5372397430"]]},{"title":"ts-axios 更多功能实现","collapsable":false,"children":[["10.ts-axios 更多功能实现/01.withCredentials.md","withCredentials","/pages/5dce43eba796a2ab"],["10.ts-axios 更多功能实现/02.XSRF 防御.md","XSRF 防御","/pages/390cb70e2b619449"],["10.ts-axios 更多功能实现/03.上传和下载的进度监控.md","上传和下载的进度监控","/pages/1376fd897809036e"],["10.ts-axios 更多功能实现/04.HTTP 授权.md","HTTP 授权","/pages/89cd6496c23159ae"],["10.ts-axios 更多功能实现/05.自定义合法状态码.md","自定义合法状态码","/pages/40b41ce8e8159567"],["10.ts-axios 更多功能实现/06.自定义参数序列化.md","自定义参数序列化","/pages/7753b8141663e54a"],["10.ts-axios 更多功能实现/07.baseURL.md","baseURL","/pages/0b9f2ee2b4dbb728"],["10.ts-axios 更多功能实现/08.静态方法扩展.md","静态方法扩展","/pages/c26b053540a7dafa"]]},{"title":"ts-axios 单元测试","collapsable":false,"children":[["11.ts-axios 单元测试/01.前言.md","前言","/pages/df36888424843793"],["11.ts-axios 单元测试/02.Jest 安装和配置.md","Jest 安装和配置","/pages/bf5c625a35757b37"],["11.ts-axios 单元测试/03.辅助模块单元测试.md","辅助模块单元测试","/pages/13f147a9b355c4c1"],["11.ts-axios 单元测试/04.请求模块单元测试.md","请求模块单元测试","/pages/e1d15dec8634e6b5"],["11.ts-axios 单元测试/05.headers 模块单元测试.md","headers 模块单元测试","/pages/ddd86ec39b5dfe33"],["11.ts-axios 单元测试/06.Axios 实例模块单元测试.md","Axios 实例模块单元测试","/pages/2eac7a0a0d644c15"],["11.ts-axios 单元测试/07.拦截器模块单元测试.md","拦截器模块单元测试","/pages/97de6fd6293a2c6e"],["11.ts-axios 单元测试/08.mergeConfig 模块单元测试.md","mergeConfig 模块单元测试","/pages/cdf59840306f9e81"],["11.ts-axios 单元测试/09.请求取消模块单元测试.md","请求取消模块单元测试","/pages/6fa16aee29527032"],["11.ts-axios 单元测试/10.剩余模块单元测试.md","剩余模块单元测试","/pages/9572134781ba6a25"]]},{"title":"ts-axios 部署与发布","collapsable":false,"children":[["12.ts-axios 部署与发布/01.ts-axios 编译与发布.md","ts-axios 编译与发布","/pages/3e5d5a45ad50f198"],["12.ts-axios 部署与发布/02.引用 ts-axios 库.md","引用 ts-axios 库","/pages/c6bdbd5bd60adf5a"]]}], - "/《Vue》笔记/": [{"title":"《Vue》笔记","collapsable":false,"children":[]},{"title":"基础","collapsable":false,"children":[["01.基础/00.MVVM模式.md","MVVM模式"],["01.基础/10.生命周期.md","生命周期"],["01.基础/20.计算属性 vs 方法 vs 侦听属性.md","计算属性 vs 方法 vs 侦听属性"],["01.基础/30.v-if vs v-show.md","v-if vs v-show"],["01.基础/35.列表渲染之数组、对象更新检测.md","列表渲染之数组、对象更新检测"]]},{"title":"组件","collapsable":false,"children":[["02.组件/36.使用组件的细节点.md","使用组件的细节点"],["02.组件/40.父组件给子组件传值.md","父组件给子组件传值"],["02.组件/50.子组件派发事件和值给父组件.md","子组件派发事件和值给父组件"],["02.组件/52.Prop 验证 与 非 Prop 的 Attribute.md","Prop 验证 与 非 Prop 的 Attribute"],["02.组件/55.自定义事件.md","自定义事件"],["02.组件/60.兄弟组件传值.md","兄弟组件传值"],["02.组件/65.非父子组件传值.md","非父子组件传值"],["02.组件/70.父组件调用子组件方法并传入值.md","父组件调用子组件方法并传入值"],["02.组件/75.插槽slot.md","插槽slot"],["02.组件/80.动态组件与 v-once 指令.md","动态组件与 v-once 指令"],["02.组件/90.vue父子组件的生命周期顺序.md","vue父子组件的生命周期顺序"]]},{"title":"过渡&动画","collapsable":false,"children":[["03.过渡&动画/110.transition过渡&动画.md","transition过渡&动画"],["03.过渡&动画/112.使用animate库.md","使用animate库"],["03.过渡&动画/120.transition-group列表过渡.md","transition-group列表过渡"]]},{"title":"可复用性&组合","collapsable":false,"children":[["04.可复用性&组合/01.Mixin混入.md","Mixin混入"]]},{"title":"工具","collapsable":false,"children":[["05.工具/10.Vue CLi v3 创建项目使用记录.md","Vue CLi v3 创建项目使用记录"]]},{"title":"规模化","collapsable":false,"children":[["06.规模化/100.vuex操作相关.md","vuex操作相关"],["06.规模化/140.路由懒加载.md","路由懒加载"]]},{"title":"其他","collapsable":false,"children":[["99.其他/80.Vue中的防抖函数封装和使用.md","Vue中的防抖函数封装和使用"],["99.其他/90.操作本地缓存.md","操作本地缓存"]]}], + "/《Vue》笔记/": [{"title":"《Vue》笔记","collapsable":false,"children":[]},{"title":"基础","collapsable":false,"children":[["01.基础/00.MVVM模式.md","MVVM模式","/pages/114158caa9e96df0"],["01.基础/10.生命周期.md","生命周期","/pages/176808a1b5f843b8"],["01.基础/20.计算属性 vs 方法 vs 侦听属性.md","计算属性 vs 方法 vs 侦听属性","/pages/351f72ecd9c41129"],["01.基础/30.v-if vs v-show.md","v-if vs v-show","/pages/73e4064340277b05"],["01.基础/35.列表渲染之数组、对象更新检测.md","列表渲染之数组、对象更新检测","/pages/04783a6691cc9d06"]]},{"title":"组件","collapsable":false,"children":[["02.组件/36.使用组件的细节点.md","使用组件的细节点","/pages/83a1ab785e7fd70c"],["02.组件/40.父组件给子组件传值.md","父组件给子组件传值","/pages/07b384c2e6232e07"],["02.组件/50.子组件派发事件和值给父组件.md","子组件派发事件和值给父组件","/pages/0f19a1bcac14fd41"],["02.组件/52.Prop 验证 与 非 Prop 的 Attribute.md","Prop 验证 与 非 Prop 的 Attribute","/pages/a3080f60f6596eb4"],["02.组件/55.自定义事件.md","自定义事件","/pages/9651417d08d1779d"],["02.组件/60.兄弟组件传值.md","兄弟组件传值","/pages/809f4582d9ca9552"],["02.组件/65.非父子组件传值.md","非父子组件传值","/pages/d408e64f666f146d"],["02.组件/70.父组件调用子组件方法并传入值.md","父组件调用子组件方法并传入值","/pages/2e24dab728769e0c"],["02.组件/75.插槽slot.md","插槽slot","/pages/055ecee9a4325386"],["02.组件/80.动态组件与 v-once 指令.md","动态组件与 v-once 指令","/pages/636ca33122e9a64b"],["02.组件/90.vue父子组件的生命周期顺序.md","vue父子组件的生命周期顺序","/pages/e6cec47efa42d7f1"]]},{"title":"过渡&动画","collapsable":false,"children":[["03.过渡&动画/110.transition过渡&动画.md","transition过渡&动画","/pages/184a96b493a97078"],["03.过渡&动画/112.使用animate库.md","使用animate库","/pages/3b0a20e70805fcea"],["03.过渡&动画/120.transition-group列表过渡.md","transition-group列表过渡","/pages/0aa92922ace6bb5e"]]},{"title":"可复用性&组合","collapsable":false,"children":[["04.可复用性&组合/01.Mixin混入.md","Mixin混入","/pages/bd36a3c1bc3e0821"]]},{"title":"工具","collapsable":false,"children":[["05.工具/10.Vue CLi v3 创建项目使用记录.md","Vue CLi v3 创建项目使用记录","/pages/d00311f8174119b2"]]},{"title":"规模化","collapsable":false,"children":[["06.规模化/100.vuex操作相关.md","vuex操作相关","/pages/d9d62d6ab8ff99a6"],["06.规模化/140.路由懒加载.md","路由懒加载","/pages/38ecac9a9b92f037"]]},{"title":"其他","collapsable":false,"children":[["99.其他/80.Vue中的防抖函数封装和使用.md","Vue中的防抖函数封装和使用","/pages/fb08e252dfd8fdfd"],["99.其他/90.操作本地缓存.md","操作本地缓存","/pages/30a94dbe96873b33"]]}], } \ No newline at end of file diff --git a/docs/.vuepress/config/sidebar.js b/docs/.vuepress/config/sidebar.js index ea2a43d..dd315aa 100644 --- a/docs/.vuepress/config/sidebar.js +++ b/docs/.vuepress/config/sidebar.js @@ -35,7 +35,7 @@ module.exports = { // 侧边栏 collapsable: false, //是否可折叠,可选的,默认true sidebarDepth: 2, // 深度,可选的, 默认值是 1 children: [ - ['01.Git使用手册','Git使用手册'], // 同 {title: 'Git使用文档',path: 'git'} + ['01.Git使用手册','Git使用手册'], // 同 {path: '01.Git使用手册', title: 'Git使用文档'} ['02.GitHub高级搜索技巧','GitHub高级搜索技巧'], ['03.Markdown使用教程','Markdown使用教程'], ['04.npm常用命令','npm常用命令'], diff --git a/docs/.vuepress/plugins/enhanced-search/EnhancedSearchBox.vue b/docs/.vuepress/plugins/enhanced-search/EnhancedSearchBox.vue index 133f75b..7cc5c50 100644 --- a/docs/.vuepress/plugins/enhanced-search/EnhancedSearchBox.vue +++ b/docs/.vuepress/plugins/enhanced-search/EnhancedSearchBox.vue @@ -29,7 +29,7 @@ @mouseenter="focus(i)" > - <a :href="s.path" @click.prevent v-if="s.thirdparty"> + <a :href="s.path" @click.prevent v-if="!s.thirdparty"> <span class="page-title">{{ s.title || s.path }}</span> <span v-if="s.header" class="header">> {{ s.header.title }}</span> </a> @@ -126,7 +126,6 @@ export default { res.push(item) }) } - return res }, diff --git a/docs/.vuepress/plugins/love-me/love-me.js b/docs/.vuepress/plugins/love-me/love-me.js index a40afb2..f93855e 100644 --- a/docs/.vuepress/plugins/love-me/love-me.js +++ b/docs/.vuepress/plugins/love-me/love-me.js @@ -13,9 +13,7 @@ export default () => { let mark = true; EXCLUDECLASS && e.path && e.path.forEach((item) =>{ if(item.nodeType === 1) { - if(item.className.indexOf(EXCLUDECLASS) > -1) { - mark = false; - } + typeof item.className === 'string' && item.className.indexOf(EXCLUDECLASS) > -1 ? mark = false : '' } }) diff --git a/docs/.vuepress/theme/components/Catalogue.vue b/docs/.vuepress/theme/components/Catalogue.vue new file mode 100644 index 0000000..7ce563b --- /dev/null +++ b/docs/.vuepress/theme/components/Catalogue.vue @@ -0,0 +1,48 @@ +<template> + <div class="theme-default-content"> + <div class="column-wrapper"> + <img :src="pageData.imgUrl" /> + <div class="column-info"> + <span class="title">{{pageData.title}}</span> + <div class="description" v-html="pageData.description"></div> + </div> + </div> + <div class="catalogue"> + 正在开发中... + </div> + </div> +</template> + +<script> +export default { + data() { + return { + pageData: {} + } + }, + mounted() { + // const { sidebar } = this.$site.themeConfig + this.pageData = this.$frontmatter.pageComponent.data + this.pageData.title = this.$frontmatter.title + console.log(this.pageData) + } +} +</script> + +<style scoped lang="stylus" rel="stylesheet/stylus"> +.column-wrapper + display flex + margin-top 4.6rem + padding-bottom 2rem + border-bottom 1px solid #eaecef + img + width 90px + height 90px + margin-right 1rem + .column-info + .title + font-size 1.6rem + .description + color #666 + margin .5rem 0 +</style> diff --git a/docs/.vuepress/theme/components/Page.vue b/docs/.vuepress/theme/components/Page.vue index abc3497..b13767b 100644 --- a/docs/.vuepress/theme/components/Page.vue +++ b/docs/.vuepress/theme/components/Page.vue @@ -2,6 +2,8 @@ <main class="page"> <slot name="top" /> + <component v-if="pageComponent" :is="pageComponent" /> + <Content class="theme-default-content" /> <PageEdit /> @@ -16,11 +18,17 @@ <script> import PageEdit from '@theme/components/PageEdit.vue' import PageNav from '@theme/components/PageNav.vue' +import Catalogue from './Catalogue.vue' import Article from './Article.vue' export default { - components: { PageEdit, PageNav, Article}, - props: ['sidebarItems'] + components: { PageEdit, PageNav, Catalogue, Article}, + props: ['sidebarItems'], + computed: { + pageComponent () { + return this.$frontmatter.pageComponent ? this.$frontmatter.pageComponent.name : false + } + } } </script> diff --git a/docs/01.前端/10.学习笔记/00.《JavaScript教程》笔记.md b/docs/01.前端/10.学习笔记/00.《JavaScript教程》笔记.md index 4b6057a..33c29dd 100644 --- a/docs/01.前端/10.学习笔记/00.《JavaScript教程》笔记.md +++ b/docs/01.前端/10.学习笔记/00.《JavaScript教程》笔记.md @@ -1,4 +1,11 @@ --- +# 使用页面组件 +pageComponent: + name: Catalogue # 组件名 Catalogue => 目录页组件 + data: # 该组件使用的数据 + imgUrl: https://cdn.jsdelivr.net/gh/xugaoyi/image_store/blog/20200112120340.png + description: 说明:本章内容为博主在原教程基础上添加学习笔记,教程版权归原作者所有。来源:<a href="https://wangdoc.com/javascript/" target="_blank">https://wangdoc.com/javascript/</a> + title: 《JavaScript教程》笔记 date: 2020-01-12 11:51:53 permalink: /pages/b002833e252f5727 @@ -6,7 +13,8 @@ article: false comment: false editLink: false --- -<main aria-labelledby="main-title" class="home"> + +<!-- <main aria-labelledby="main-title" class="home"> <header class="hero"> <img src="https://cdn.jsdelivr.net/gh/xugaoyi/image_store/blog/20200112120340.png" alt="hero"> <h1 id="main-title">《JavaScript教程》笔记</h1> @@ -21,7 +29,9 @@ editLink: false <script> export default { mounted() { - console.log(this) + const { sidebar } = this.$site.themeConfig + console.log(sidebar) + } } -</script> \ No newline at end of file +</script> --> \ No newline at end of file diff --git a/docs/about/01.关于.md b/docs/about/01.关于.md index 8661575..efb51ed 100644 --- a/docs/about/01.关于.md +++ b/docs/about/01.关于.md @@ -9,7 +9,7 @@ article: false # 关于 -这是一个兼具博客文章、个人技能树、文档查找的个人网站,主要内容是Web前端技术。如果你喜欢这个博客欢迎到[GitHub](https://github.com/xugaoyi/blog)点个Star、获取源码,或者交换 [友链](/pages/844eea1b2387fb96/)。 +这是一个兼具博客文章、个人技能树、文档查找的个人网站,主要内容是Web前端技术。如果你喜欢这个博客&主题欢迎到[GitHub](https://github.com/xugaoyi/blog)点个Star、获取源码,或者交换 [友链](/pages/844eea1b2387fb96/)。 博主,从事Web前端开发工作,喜欢唱、跳、rap、篮球,写程序。 本人↓↓↓ diff --git a/docs/index.md b/docs/index.md index 7f5dcd1..7187317 100644 --- a/docs/index.md +++ b/docs/index.md @@ -42,7 +42,7 @@ footer: --- ## 简介 -这是一个兼具博客文章、个人技能树、文档查找的个人网站,主要内容是Web前端技术([最新](/timeline/))。如果你喜欢这个博客&主题欢迎到 [GitHub](https://github.com/xugaoyi/blog) 点个Star、获取主题源码,或者交换[友链](/pages/844eea1b2387fb96/)。 +这是一个兼具博客文章、个人技能树、文档查找的个人网站。如果你喜欢这个博客&主题欢迎到 [GitHub](https://github.com/xugaoyi/blog) 点个Star、获取主题源码,或者交换[友链](/pages/844eea1b2387fb96/) ( •̀ ω •́ )✧。 </br> diff --git a/utils/sidebar.js b/utils/sidebar.js index d226252..0ebd237 100644 --- a/utils/sidebar.js +++ b/utils/sidebar.js @@ -6,6 +6,7 @@ const fs = require('fs'); // 文件模块 const path = require('path'); // 路径模块 const ejs = require('ejs'); // ejs模板引擎 const logger = require('tracer').colorConsole(); // 控制台工具(用于控制台打印信息包含时间、打印类型、文件及代码行号、对象、颜色) +const matter = require('gray-matter'); // FrontMatter解析器 const docsRoot = path.join(__dirname, '..', 'docs'); // docs文件路径 const sidebarPath = path.join(__dirname, '..', 'docs', '.vuepress', 'config', 'sidebar-auto.js'); // 侧边栏js文件要保存的路径 @@ -13,7 +14,7 @@ const sidebarPath = path.join(__dirname, '..', 'docs', '.vuepress', 'config', 's // sidebar-auto.js代码模板 const sidebarTemplate = ` -// 侧边栏自动生成 +// 侧边栏自动生成 // 最里面的数组,格式:[<path>, <title>, <permalink>],其中permalink并非侧边栏所需,而是提供给其他页面使用 module.exports = { <% for (let item of sidebarData) { %> "<%- item.path %>": <%- JSON.stringify(item.sidebarArr) %>, @@ -98,7 +99,10 @@ function mapTocToSidebar(root, prefix){ logger.error(`该文件 "${file}" 非md文件,不支持非md文件类型`); return; } - sidebar[order] = [prefix + filename, title]; // [<前缀加完整文件名>, <文件标题>] + const contentStr = fs.readFileSync(file, 'utf8') // 读取md文件内容,返回字符串 + const { data } = matter(contentStr) // 解析出front matter数据 + const permalink = data.permalink || '' + sidebar[order] = [prefix + filename, title, permalink ]; // [<路径>, <文件标题>, <永久链接>] } })