mirror of
https://github.com/cool-team-official/cool-admin-vue.git
synced 2025-12-15 07:27:54 +00:00
93 lines
1.9 KiB
TypeScript
93 lines
1.9 KiB
TypeScript
import type { Plugin } from "vite";
|
|
import { createEps } from "./eps";
|
|
import { createCtx } from "./ctx";
|
|
import { createSvg } from "./svg";
|
|
|
|
export async function virtual(): Promise<Plugin> {
|
|
const virtualModuleIds: string[] = [
|
|
"virtual:eps",
|
|
"virtual:ctx",
|
|
"virtual:svg-register",
|
|
"virtual:svg-icons",
|
|
];
|
|
|
|
createEps();
|
|
|
|
return {
|
|
name: "vite-cool-virtual",
|
|
enforce: "pre",
|
|
configureServer(server) {
|
|
server.middlewares.use(async (req, res, next) => {
|
|
// 页面刷新时触发
|
|
if (req.url == "/@vite/client") {
|
|
// 重新加载虚拟模块
|
|
virtualModuleIds.forEach((vm) => {
|
|
const mod = server.moduleGraph.getModuleById(`\0${vm}`);
|
|
|
|
if (mod) {
|
|
server.moduleGraph.invalidateModule(mod);
|
|
}
|
|
});
|
|
}
|
|
|
|
next();
|
|
});
|
|
},
|
|
handleHotUpdate({ file, server }) {
|
|
// 文件修改时触发
|
|
if (
|
|
!["pages.json", "dist", "build/cool", "eps.json", "eps.d.ts"].some((e) =>
|
|
file.includes(e),
|
|
)
|
|
) {
|
|
createCtx();
|
|
createEps().then((data) => {
|
|
if (data.isUpdate) {
|
|
// 通知客户端刷新
|
|
(server.hot || server.ws).send({
|
|
type: "custom",
|
|
event: "eps-update",
|
|
data,
|
|
});
|
|
}
|
|
});
|
|
}
|
|
},
|
|
resolveId(id) {
|
|
if (virtualModuleIds.includes(id)) {
|
|
return "\0" + id;
|
|
}
|
|
},
|
|
async load(id) {
|
|
if (id === "\0virtual:eps") {
|
|
const eps = await createEps();
|
|
|
|
return `
|
|
export const eps = ${JSON.stringify(eps)}
|
|
`;
|
|
}
|
|
if (id === "\0virtual:ctx") {
|
|
const ctx = await createCtx();
|
|
|
|
return `
|
|
export const ctx = ${JSON.stringify(ctx)}
|
|
`;
|
|
}
|
|
|
|
if (id == "\0virtual:svg-register") {
|
|
const { code } = await createSvg();
|
|
|
|
return code;
|
|
}
|
|
|
|
if (id == "\0virtual:svg-icons") {
|
|
const { svgIcons } = await createSvg();
|
|
|
|
return `
|
|
export const svgIcons = ${JSON.stringify(svgIcons)}
|
|
`;
|
|
}
|
|
},
|
|
};
|
|
}
|