You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
5.6 KiB
135 lines
5.6 KiB
import { containerPreview, componentPreview } from "@vitepress-demo-preview/plugin";
|
|
import path, { resolve } from "path";
|
|
import { defineConfig } from "vitepress";
|
|
import { getSidebar, getNav } from "./modules";
|
|
import { MarkdownTransform } from "./plugins/markdownTransform";
|
|
|
|
let oldSidebar: string;
|
|
// let isRestarting: boolean = false;
|
|
|
|
const src = "src"
|
|
|
|
const userConfig = defineConfig({
|
|
lang: "zh-CN",
|
|
// lastUpdated: true,
|
|
head: [["link", { rel: "icon", href: "/favicon.png" }]],
|
|
title: "XYX UTILS",
|
|
description: "为自己构建适合的工具函数",
|
|
themeConfig: {
|
|
siteTitle: "XYX-UTILS",
|
|
footer: {
|
|
message: "Released under the MIT License.",
|
|
copyright: `Copyright © ${new Date().getFullYear()}-present NPMRUN`,
|
|
},
|
|
socialLinks: [{ icon: "github", link: "https://github.com/npmrun/xyx-utils" }],
|
|
// https://juejin.cn/post/7227358177489961018#heading-5
|
|
// sidebar,
|
|
},
|
|
markdown: {
|
|
theme: {
|
|
light: "vitesse-light",
|
|
dark: "vitesse-dark",
|
|
},
|
|
config(md) {
|
|
md.use(containerPreview, { clientOnly: true });
|
|
md.use(componentPreview, { clientOnly: true });
|
|
},
|
|
},
|
|
vite: {
|
|
resolve: {
|
|
alias: {
|
|
"@xyx-utils/vue3": resolve(process.cwd(), "packages/vue3/" + src),
|
|
"@xyx-utils/shared": resolve(process.cwd(), "packages/shared/" + src),
|
|
"@xyx-utils/browser": resolve(process.cwd(), "packages/browser/" + src),
|
|
"@xyx-utils/core": resolve(process.cwd(), "packages/core/" + src),
|
|
"@xyx-utils/node": resolve(process.cwd(), "packages/node/" + src),
|
|
"xyx-utils": resolve(process.cwd(), "packages/xyx-utils/" + src),
|
|
},
|
|
},
|
|
server: {
|
|
port: 1234,
|
|
},
|
|
publicDir: path.resolve(__dirname, "../../public"),
|
|
plugins: [
|
|
MarkdownTransform(),
|
|
{
|
|
name: "refresh-tree",
|
|
enforce: "post",
|
|
config(config) {
|
|
let curSidebar = getSidebar();
|
|
// @ts-ignore
|
|
config.vitepress.site.themeConfig.sidebar = curSidebar;
|
|
// @ts-ignore
|
|
config.vitepress.site.themeConfig.nav = getNav();
|
|
oldSidebar = JSON.stringify(curSidebar);
|
|
return config;
|
|
},
|
|
async handleHotUpdate(ctx) {
|
|
const { file, read, server, modules } = ctx;
|
|
if (file.endsWith(".md")) {
|
|
let curSidebar = getSidebar();
|
|
if (JSON.stringify(curSidebar) !== oldSidebar) {
|
|
if (userConfig.themeConfig) {
|
|
userConfig.themeConfig.sidebar = curSidebar;
|
|
oldSidebar = JSON.stringify(curSidebar);
|
|
}
|
|
server.moduleGraph.onFileChange("/@siteData");
|
|
}
|
|
// const mod = server.moduleGraph.getModuleById(
|
|
// '/@siteData'
|
|
// )
|
|
// if (!mod) return
|
|
// if (userConfig.themeConfig) {
|
|
// let curSidebar = getSidebar()
|
|
// if (JSON.stringify(curSidebar) !== oldSidebar) {
|
|
// userConfig.themeConfig.sidebar = curSidebar
|
|
// // server.ws.send({
|
|
// // type: 'custom',
|
|
// // event: '/@siteData',
|
|
// // data: {
|
|
// // default: userConfig
|
|
// // }
|
|
// // })
|
|
// server.ws.send({
|
|
// type: 'update',
|
|
// updates: [
|
|
// {
|
|
// acceptedPath: mod.url,
|
|
// path: mod.url,
|
|
// timestamp: Date.now(),
|
|
// type: 'js-update'
|
|
// }
|
|
// ]
|
|
// })
|
|
// }
|
|
}
|
|
},
|
|
configureServer(server) {
|
|
// const { moduleGraph, watcher, ws, restart } = server
|
|
// function reload() {
|
|
// let curSidebar = getSidebar()
|
|
// if (JSON.stringify(curSidebar) !== oldSidebar) {
|
|
// console.log("侧边栏更新");
|
|
// if (isRestarting) {
|
|
// return
|
|
// }
|
|
// isRestarting = true
|
|
// restart().then(() => {
|
|
// setTimeout(() => {
|
|
// isRestarting = false
|
|
// }, 0);
|
|
// })
|
|
// }
|
|
// }
|
|
// watcher
|
|
// .add(["**/*.md"])
|
|
// .on('add', reload)
|
|
// .on('change', reload)
|
|
// .on('unlink', reload)
|
|
},
|
|
},
|
|
],
|
|
},
|
|
});
|
|
|
|
export default userConfig;
|
|
|