mirror of
https://github.com/cool-team-official/cool-admin-vue.git
synced 2024-11-01 14:10:27 +08:00
62 lines
1.3 KiB
TypeScript
62 lines
1.3 KiB
TypeScript
|
import type { Plugin, ViteDevServer } from "vite";
|
||
|
import { createEps } from "./eps";
|
||
|
import { createModule } from "./module";
|
||
|
|
||
|
export function virtual(): Plugin {
|
||
|
const virtualModuleIds = ["virtual:eps", "virtual:module"];
|
||
|
|
||
|
// 使虚拟模块失效,重新加载
|
||
|
function buildEps(server: ViteDevServer) {
|
||
|
virtualModuleIds.forEach((vm) => {
|
||
|
const mod = server.moduleGraph.getModuleById(`\0${vm}`);
|
||
|
|
||
|
if (mod) {
|
||
|
server.moduleGraph.invalidateModule(mod);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
return {
|
||
|
name: "vite-cool-virtual",
|
||
|
enforce: "pre",
|
||
|
configureServer(server) {
|
||
|
server.middlewares.use(async (req, res, next) => {
|
||
|
// 页面刷新时触发 eps 刷新
|
||
|
if (req.url == "/@vite/client") {
|
||
|
buildEps(server);
|
||
|
}
|
||
|
|
||
|
next();
|
||
|
});
|
||
|
},
|
||
|
handleHotUpdate({ file, server }) {
|
||
|
// 代码保存时触发 eps 刷新
|
||
|
if (!file.includes("build/cool/dist")) {
|
||
|
buildEps(server);
|
||
|
}
|
||
|
},
|
||
|
resolveId(id) {
|
||
|
if (virtualModuleIds.includes(id)) {
|
||
|
return "\0" + id;
|
||
|
}
|
||
|
},
|
||
|
async load(id) {
|
||
|
if (id === "\0virtual:eps") {
|
||
|
const { service, list } = await createEps();
|
||
|
|
||
|
return `
|
||
|
export const eps = ${JSON.stringify({ service, list })}
|
||
|
`;
|
||
|
}
|
||
|
|
||
|
if (id === "\0virtual:module") {
|
||
|
const { dirs } = createModule();
|
||
|
|
||
|
return `
|
||
|
export const dirs = ${JSON.stringify(dirs)}
|
||
|
`;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
}
|