日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

vuepress侧边栏配置_vuepress的侧边栏怎么动态生成

發布時間:2025/3/21 vue 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vuepress侧边栏配置_vuepress的侧边栏怎么动态生成 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

\自己去除一下,復制到這邊被轉義了

const fs \= require("fs");

const path \= require("path");

const rootpath \= path.dirname(\_\_dirname);

/\*\*

\* string比較工具類

\*/

const str \= {

contains: function(string, substr, isIgnoreCase) {

if (isIgnoreCase) {

string \= string.toLowerCase();

substr \= substr.toLowerCase();

}

var startChar \= substr.substring(0, 1);

var strLen \= substr.length;

for (var j \= 0; j < string.length \- strLen + 1; j++) {

if (string.charAt(j) \== startChar) {

//如果匹配起始字符,開始查找

if (string.substring(j, j + strLen) \== substr) {

//如果從j開始的字符與str匹配,那ok

return true;

}

}

}

return false;

}

};

/\*\*

\* 文件助手: 主要用于讀取當前文件下的所有目錄和文件

\*/

const filehelper \= {

getAllFiles: function(rpath) {

let filenames \= \[\];

fs.readdirSync(rpath).forEach(file \=> {

fullpath \= rpath + "/" + file;

var fileinfo \= fs.statSync(fullpath);

// 過濾 .DS\_Store

if (fileinfo.isFile() && !str.contains(file, "DS\_Store", true)) {

if (file \=== "README.md" || file \=== "readme.md") {

file \= "";

} else {

file \= file.replace(".md", "");

}

filenames.push(file);

}

});

filenames.sort();

return filenames;

},

getAllDirs: function getAllDirs(mypath \= ".") {

const items \= fs.readdirSync(mypath);

let result \= \[\];

// 遍歷當前目錄中所有文件夾

items.map(item \=> {

let temp \= path.join(mypath, item);

// 過濾無關的文件夾

if (

fs.statSync(temp).isDirectory() &&

!item.startsWith(".") &&

!str.contains(item, "DS\_Store", true)

) {

let path \= mypath + "/" + item + "/";

result.push(path);

result \= result.concat(getAllDirs(temp));

}

});

return result;

}

};

// nav的鏈接路徑

var navLinks \= \[\];

// 側邊欄

var sidebar \= {};

// 導航欄

var nav \= getNav();

function genSideBar() {

var sidebars \= {};

var allDirs \= filehelper.getAllDirs(rootpath);

allDirs.forEach(item \=> {

let dirFiles \= filehelper.getAllFiles(item);

let dirname \= item.replace(rootpath, "");

navLinks.push(dirname);

if (dirFiles.length \> 1) {

sidebars\[dirname\] \= dirFiles;

}

});

sidebar \= sidebars;

}

/\*\*

\* 先生成所有nav文件鏈接;

\* @param filepaths

\* @returns {Array}

\*/

function genNavLink(filepaths) {

genSideBar();

var navLinks \= \[\];

filepaths.forEach(p \=> {

var ss \= p.toString().split("/");

var name \= ss\[ss.length \- 2\];

var parent \= p.replace(name + "/", "");

navLinks.push({

text: name,

link: p,

items: \[\],

parent: parent

});

});

return navLinks;

}

/\*\*

\* 自定義排序文件夾

\* @param a

\* @param b

\* @returns {number}

\*/

function sortDir(a, b) {

let al \= a.parent.toString().split("/").length;

let bl \= b.parent.toString().split("/").length;

if (al \> bl) {

return \-1;

}

if (al \=== bl) {

return 0;

}

if (al < bl) {

return 1;

}

}

/\*\*

\* 生成最終的 nav配置信息

\* @param navLinks

\* @returns {Array}

\*/

function getNav() {

let nnavs \= genNavLink(navLinks);

nnavs.sort(sortDir);

var iniMap \= {};

var result \= \[\];

var delMap \= {};

nnavs.forEach(l \=> {

iniMap\[l.link\] \= l;

});

nnavs.forEach(l \=> {

var parentLink \= l.parent;

if (parentLink !== "/") {

iniMap\[parentLink\].items.push(l);

delMap\[l.link\] \= l;

}

});

for (var k in iniMap) {

if (delMap\[k\] != null) {

delete iniMap\[k\];

continue;

}

result.push(iniMap\[k\]);

}

return result;

}

/\*\*

\* Vuepress 最終需要的配置信息, 修改其他信息在此處配置

\*/

var config \= {

title: "title",

description: "description",

lang: "zh-CN",

head: \[\["link", { rel: "icon", href: "/logo.png" }\]\],

themeConfig: {

sidebar: sidebar,

nav: nav,

sidebarDepth: 3

}

};

module.exports \= config;

總結

以上是生活随笔為你收集整理的vuepress侧边栏配置_vuepress的侧边栏怎么动态生成的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。