Prechádzať zdrojové kódy

解决eps本地不刷新问题

神仙都没用 1 rok pred
rodič
commit
bc1c18b415
4 zmenil súbory, kde vykonal 28 pridanie a 26 odobranie
  1. 19 20
      build/cool/virtual.ts
  2. 1 1
      package.json
  3. 4 1
      src/cool/bootstrap/eps.ts
  4. 4 4
      yarn.lock

+ 19 - 20
build/cool/virtual.ts

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

+ 1 - 1
package.json

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

+ 4 - 1
src/cool/bootstrap/eps.ts

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

+ 4 - 4
yarn.lock

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