解决eps本地不刷新问题

This commit is contained in:
神仙都没用 2023-10-30 21:30:29 +08:00
parent 9f5ea9aff8
commit bc1c18b415
4 changed files with 28 additions and 26 deletions

View File

@ -1,43 +1,42 @@
import type { Plugin, ViteDevServer } from "vite"; import type { Plugin } from "vite";
import { createEps } from "./eps"; import { createEps } from "./eps";
import { createModule } from "./module"; import { createModule } from "./module";
export function virtual(): Plugin { export function virtual(): Plugin {
const virtualModuleIds = ["virtual:eps", "virtual:module"]; 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 { return {
name: "vite-cool-virtual", name: "vite-cool-virtual",
enforce: "pre", enforce: "pre",
configureServer(server) { configureServer(server) {
server.middlewares.use(async (req, res, next) => { server.middlewares.use(async (req, res, next) => {
// 页面刷新时触发 eps 刷新 // 页面刷新时触发
if (req.url == "/@vite/client") { if (req.url == "/@vite/client") {
buildEps(server); // 重新加载虚拟模块
virtualModuleIds.forEach((vm) => {
const mod = server.moduleGraph.getModuleById(`\0${vm}`);
if (mod) {
server.moduleGraph.invalidateModule(mod);
}
});
} }
next(); next();
}); });
}, },
handleHotUpdate({ file, server }) { async handleHotUpdate({ file, server }) {
// 代码保存时触发 eps 刷新 // 代码保存时触发
if (!file.includes("build/cool/dist")) { if (!file.includes("build/cool/dist")) {
buildEps(server); const { service } = await createEps();
// 通知客户端刷新 // 通知客户端刷新
server.ws.send({ server.ws.send({
type: "custom", type: "custom",
event: "eps-update" event: "eps-update",
data: {
service
}
}); });
} }
}, },
@ -48,10 +47,10 @@ export function virtual(): Plugin {
}, },
async load(id) { async load(id) {
if (id === "\0virtual:eps") { if (id === "\0virtual:eps") {
const { service, list } = await createEps(); const { service } = await createEps();
return ` return `
export const eps = ${JSON.stringify({ service, list })} export const eps = ${JSON.stringify({ service })}
`; `;
} }

View File

@ -61,7 +61,7 @@
"sass": "^1.66.1", "sass": "^1.66.1",
"terser": "^5.19.2", "terser": "^5.19.2",
"typescript": "^5.2.2", "typescript": "^5.2.2",
"vite": "^4.4.9", "vite": "^4.5.0",
"vite-plugin-compression": "^0.5.1" "vite-plugin-compression": "^0.5.1"
} }
} }

View File

@ -120,7 +120,10 @@ export function createEps(modules: Module[]) {
// 监听 vite 触发事件 // 监听 vite 触发事件
if (import.meta.hot) { if (import.meta.hot) {
import.meta.hot.on("eps-update", () => { import.meta.hot.on("eps-update", ({ service }) => {
if (service) {
eps.service = service;
}
onUpdate(); onUpdate();
}); });
} }

View File

@ -3806,10 +3806,10 @@ vite-plugin-compression@^0.5.1:
debug "^4.3.3" debug "^4.3.3"
fs-extra "^10.0.0" fs-extra "^10.0.0"
vite@^4.4.9: vite@^4.5.0:
version "4.4.9" version "4.5.0"
resolved "https://registry.yarnpkg.com/vite/-/vite-4.4.9.tgz#1402423f1a2f8d66fd8d15e351127c7236d29d3d" resolved "https://registry.yarnpkg.com/vite/-/vite-4.5.0.tgz#ec406295b4167ac3bc23e26f9c8ff559287cff26"
integrity sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA== integrity sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==
dependencies: dependencies:
esbuild "^0.18.10" esbuild "^0.18.10"
postcss "^8.4.27" postcss "^8.4.27"