瀏覽代碼

:art: https://github.com/siyuan-note/siyuan/issues/11277

Vanessa 1 年之前
父節點
當前提交
c0fb594133
共有 4 個文件被更改,包括 14 次插入10 次删除
  1. 1 1
      app/src/index.ts
  2. 1 1
      app/src/mobile/util/onMessage.ts
  3. 11 7
      app/src/plugin/loader.ts
  4. 1 1
      app/src/window/index.ts

+ 1 - 1
app/src/index.ts

@@ -61,7 +61,7 @@ export class App {
                     if (data) {
                         switch (data.cmd) {
                             case "reloadPlugin":
-                                reloadPlugin(this);
+                                reloadPlugin(this, data.data);
                                 break;
                             case "syncMergeResult":
                                 reloadSync(this, data.data);

+ 1 - 1
app/src/mobile/util/onMessage.ts

@@ -8,7 +8,7 @@ export const onMessage = (app: App, data: IWebSocketData) => {
     if (data) {
         switch (data.cmd) {
             case "reloadPlugin":
-                reloadPlugin(app);
+                reloadPlugin(app, data.data);
                 break;
             case "syncMergeResult":
                 reloadSync(app, data.data);

+ 11 - 7
app/src/plugin/loader.ts

@@ -25,12 +25,14 @@ const runCode = (code: string, sourceURL: string) => {
     return window.eval("(function anonymous(require, module, exports){".concat(code, "\n})\n//# sourceURL=").concat(sourceURL, "\n"));
 };
 
-export const loadPlugins = async (app: App) => {
+export const loadPlugins = async (app: App, names?: string[]) => {
     const response = await fetchSyncPost("/api/petal/loadPetals", {frontend: getFrontend()});
     let css = "";
     // 为加快启动速度,不进行 await
     response.data.forEach((item: IPluginData) => {
-        loadPluginJS(app, item);
+        if (!names || (names && !names.includes(item.name))) {
+            loadPluginJS(app, item);
+        }
         css += item.css || "" + "\n";
     });
     const pluginsStyle = document.getElementById("pluginsStyle");
@@ -197,13 +199,15 @@ export const afterLoadPlugin = (plugin: Plugin) => {
     /// #endif
 };
 
-export const reloadPlugin = (app: App) => {
-    app.plugins.forEach((item) => {
-        uninstall(this, item.name);
+export const reloadPlugin = async (app: App, data: { upsertPlugins: string[], removePlugins: string[] }) => {
+    data.removePlugins.concat(data.upsertPlugins).forEach((item) => {
+        uninstall(this, item);
     });
-    loadPlugins(this).then(() => {
+    loadPlugins(this, data.upsertPlugins).then(() => {
         app.plugins.forEach(item => {
-            afterLoadPlugin(item);
+            if (data.upsertPlugins.includes(item.name)) {
+                afterLoadPlugin(item);
+            }
         });
     });
     /// #if !MOBILE

+ 1 - 1
app/src/window/index.ts

@@ -52,7 +52,7 @@ class App {
                     if (data) {
                         switch (data.cmd) {
                             case "reloadPlugin":
-                                reloadPlugin(this);
+                                reloadPlugin(this, data.data);
                                 break;
                             case "syncMergeResult":
                                 reloadSync(this, data.data);