123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- import type { Plugin } from "vite";
- import { createEps } from "./eps";
- import { createModule } from "./module";
- export function virtual(): Plugin {
- const virtualModuleIds = ["virtual:eps", "virtual:module"];
- 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();
- });
- },
- async handleHotUpdate({ file, server }) {
- // 代码保存时触发
- if (!file.includes("build/cool/dist")) {
- const { service } = await createEps();
- // 通知客户端刷新
- server.ws.send({
- type: "custom",
- event: "eps-update",
- data: {
- service
- }
- });
- }
- },
- resolveId(id) {
- if (virtualModuleIds.includes(id)) {
- return "\0" + id;
- }
- },
- async load(id) {
- if (id === "\0virtual:eps") {
- const { service } = await createEps();
- return `
- export const eps = ${JSON.stringify({ service })}
- `;
- }
- if (id === "\0virtual:module") {
- const { dirs } = createModule();
- return `
- export const dirs = ${JSON.stringify(dirs)}
- `;
- }
- }
- };
- }
|