From 1ebdefcd43d1adec7545e8d313cf7d1d0ec847f4 Mon Sep 17 00:00:00 2001 From: Sakamoto Shiina <68018796+ShiinaSakamoto@users.noreply.github.com> Date: Wed, 26 Mar 2025 00:45:29 +0900 Subject: [PATCH] [Update/bugfix] Plugins: For development, fix hot reload issue that was restart every time updated the files. --- src-tauri/plugins/index.js | 1 + src-ui/logics/configs/plugins/usePlugins.js | 25 ++++++++----------- src-ui/plugins/index.js | 9 +++++++ .../plugins/plugin_examples/index.jsx | 0 .../main_container/MainContainer.jsx | 0 .../plugins/plugin_examples/plugin_info.json | 0 .../plugins/plugin_examples/store/store.js | 0 vite.config.js | 7 ++---- 8 files changed, 22 insertions(+), 20 deletions(-) create mode 100644 src-tauri/plugins/index.js create mode 100644 src-ui/plugins/index.js rename {src-tauri => src-ui}/plugins/plugin_examples/index.jsx (100%) rename {src-tauri => src-ui}/plugins/plugin_examples/main_container/MainContainer.jsx (100%) rename {src-tauri => src-ui}/plugins/plugin_examples/plugin_info.json (100%) rename {src-tauri => src-ui}/plugins/plugin_examples/store/store.js (100%) diff --git a/src-tauri/plugins/index.js b/src-tauri/plugins/index.js new file mode 100644 index 00000000..c8024261 --- /dev/null +++ b/src-tauri/plugins/index.js @@ -0,0 +1 @@ +// This is for preserving plugins folder. It will be detected and created 'plugins' folder to target/debug/ by tauri build. do not delete it. \ No newline at end of file diff --git a/src-ui/logics/configs/plugins/usePlugins.js b/src-ui/logics/configs/plugins/usePlugins.js index 984ee189..2c337f7c 100644 --- a/src-ui/logics/configs/plugins/usePlugins.js +++ b/src-ui/logics/configs/plugins/usePlugins.js @@ -10,8 +10,8 @@ import { useStdoutToPython } from "@logics/useStdoutToPython"; import { transform } from "@babel/standalone"; import { writeFile, createDir, exists, removeDir, readDir, BaseDirectory, readTextFile } from "@tauri-apps/api/fs"; -const dev_plugin_mapping = import.meta.glob("/src-tauri/plugins/**/index.jsx", { eager: true }); -const dev_plugin_info_mapping = import.meta.glob("/src-tauri/plugins/**/plugin_info.json", { eager: true }); +import { dev_plugins } from "@dev_plugins_path"; + import JSZip from "jszip"; import { useFetch } from "@logics_common"; @@ -85,22 +85,17 @@ export const usePlugins = () => { const asyncLoadAllPlugins = async () => { if (import.meta.env.DEV) { - // 開発時: ホットリロード対応、src-tauri以下のpluginsから直接読み込み - Object.entries(dev_plugin_mapping).forEach(([key, plugin_module]) => { - // 例: key が "/src-tauri/plugins/sample/index.jsx" の場合、plugin_info.json のパスは同じディレクトリ内にある - const pluginInfoKey = key.replace("index.jsx", "plugin_info.json"); - const plugin_info = dev_plugin_info_mapping[pluginInfoKey]; - - if (!plugin_info) { - console.error("plugin_info.json has not found:", pluginInfoKey); + // `dev_plugins` を利用してプラグインを登録 + dev_plugins.forEach(({ index, plugin_info }) => { + if (!index || !plugin_info) { + console.error("Invalid development plugin detected", index, plugin_info); return; } - - // plugin_info を使ってプラグインコンテキストを生成 const plugin_context = generatePluginContext(plugin_info); - - if (plugin_module && plugin_module.init) { - plugin_module.init(plugin_context); + if (index.init) { + index.init(plugin_context); + } else { + console.error("Plugin missing init function", plugin_info); } }); } else { diff --git a/src-ui/plugins/index.js b/src-ui/plugins/index.js new file mode 100644 index 00000000..010c3ff0 --- /dev/null +++ b/src-ui/plugins/index.js @@ -0,0 +1,9 @@ +import plugin_index_1 from "./plugin_examples/index.jsx"; +import plugin_info_1 from "./plugin_examples/plugin_info.json"; + +export const dev_plugins = [ + { + index: { init: plugin_index_1 }, + plugin_info: plugin_info_1, + } +]; \ No newline at end of file diff --git a/src-tauri/plugins/plugin_examples/index.jsx b/src-ui/plugins/plugin_examples/index.jsx similarity index 100% rename from src-tauri/plugins/plugin_examples/index.jsx rename to src-ui/plugins/plugin_examples/index.jsx diff --git a/src-tauri/plugins/plugin_examples/main_container/MainContainer.jsx b/src-ui/plugins/plugin_examples/main_container/MainContainer.jsx similarity index 100% rename from src-tauri/plugins/plugin_examples/main_container/MainContainer.jsx rename to src-ui/plugins/plugin_examples/main_container/MainContainer.jsx diff --git a/src-tauri/plugins/plugin_examples/plugin_info.json b/src-ui/plugins/plugin_examples/plugin_info.json similarity index 100% rename from src-tauri/plugins/plugin_examples/plugin_info.json rename to src-ui/plugins/plugin_examples/plugin_info.json diff --git a/src-tauri/plugins/plugin_examples/store/store.js b/src-ui/plugins/plugin_examples/store/store.js similarity index 100% rename from src-tauri/plugins/plugin_examples/store/store.js rename to src-ui/plugins/plugin_examples/store/store.js diff --git a/vite.config.js b/vite.config.js index 1abffdf1..58c824fa 100644 --- a/vite.config.js +++ b/vite.config.js @@ -33,11 +33,6 @@ export default defineConfig(async () => ({ resolve: { alias: { - "react": path.resolve(__dirname, "node_modules/react"), - "react-dom": path.resolve(__dirname, "node_modules/react-dom"), - - - "@root": path.resolve(__dirname), "@test_data": path.resolve(__dirname, "./test_data.js"), @@ -53,6 +48,8 @@ export default defineConfig(async () => ({ "@setting_box": path.resolve(__dirname, "src-ui/app/config_page/setting_section/setting_box/index.js"), "@common_components": path.resolve(__dirname, "src-ui/common_components/index.js"), + + "@dev_plugins_path": path.resolve(__dirname, "src-ui/plugins/index.js"), }, },