133 lines
4.7 KiB
JavaScript
133 lines
4.7 KiB
JavaScript
import { defineConfig } from "vite";
|
|
import react from "@vitejs/plugin-react";
|
|
import svgr from "vite-plugin-svgr";
|
|
import yaml from "@rollup/plugin-yaml";
|
|
import path from "path";
|
|
import { globSync } from "node:fs";
|
|
import { pathToFileURL } from "url";
|
|
|
|
import { dev_plugins } from "./src-ui/plugins/plugins_index.js";
|
|
|
|
const host = process.env.TAURI_DEV_HOST;
|
|
|
|
// https://vitejs.dev/config/
|
|
export default defineConfig(async () => {
|
|
const plugin_aliases = await getPluginAliases();
|
|
|
|
return {
|
|
plugins: [
|
|
yaml({ include: ["**/*.yml", "**/*.yaml"] }),
|
|
react(),
|
|
svgr(),
|
|
],
|
|
|
|
// Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build`
|
|
//
|
|
// 1. prevent vite from obscuring rust errors
|
|
clearScreen: false,
|
|
// 2. tauri expects a fixed port, fail if that port is not available
|
|
server: {
|
|
port: 1420,
|
|
strictPort: true,
|
|
host: host || false,
|
|
hmr: host
|
|
? {
|
|
protocol: "ws",
|
|
host,
|
|
port: 1421,
|
|
}
|
|
: undefined,
|
|
watch: {
|
|
// 3. tell vite to ignore watching `src-tauri`
|
|
ignored: ["**/src-tauri/**"],
|
|
},
|
|
},
|
|
|
|
build: {
|
|
outDir: path.resolve(__dirname, "dist"),
|
|
rollupOptions: {
|
|
input: {
|
|
main: path.resolve(__dirname, "index.html"),
|
|
},
|
|
},
|
|
sourcemap: true,
|
|
},
|
|
|
|
resolve: {
|
|
alias: {
|
|
"@root": path.resolve(__dirname),
|
|
"@test_data": path.resolve(__dirname, "./test_data.js"),
|
|
|
|
"@ui_configs": path.resolve(__dirname, "src-ui/ui_configs.js"),
|
|
"@scss_mixins": path.resolve(__dirname, "src-ui/common_css/mixins.scss"),
|
|
"@store": path.resolve(__dirname, "src-ui/store.js"),
|
|
"@images": path.resolve(__dirname, "src-ui/assets"),
|
|
"@utils": path.resolve(__dirname, "src-ui/utils.js"),
|
|
"@logics": path.resolve(__dirname, "src-ui/logics"),
|
|
"@logics_common": path.resolve(__dirname, "src-ui/logics/common"),
|
|
"@logics_main": path.resolve(__dirname, "src-ui/logics/main"),
|
|
"@logics_configs": path.resolve(__dirname, "src-ui/logics/configs"),
|
|
|
|
"@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"),
|
|
|
|
// Plugins
|
|
"@plugins_path": path.resolve(__dirname, "src-ui/plugins"),
|
|
"@plugins_index": path.resolve(__dirname, "src-ui/plugins/plugins_index.js"),
|
|
...plugin_aliases,
|
|
},
|
|
},
|
|
|
|
css: {
|
|
preprocessorOptions: {
|
|
scss: {
|
|
api: "modern-compiler"
|
|
}
|
|
}
|
|
}
|
|
};
|
|
});
|
|
|
|
|
|
|
|
|
|
const getPluginAliases = async () => {
|
|
const aliases = {};
|
|
const raw_config_files = globSync("src-ui/plugins/*/plugin_configs.js");
|
|
const config_files = raw_config_files.map(p => p.split(path.sep).join("/"));
|
|
|
|
for (const plugin of dev_plugins) {
|
|
const entry_path = plugin.entry_path; // 例: "dev_plugin_subtitles"
|
|
const relative_config_path = `src-ui/plugins/${entry_path}/plugin_configs.js`;
|
|
|
|
// 該当エントリのファイルがなければスキップ
|
|
if (!config_files.includes(relative_config_path)) {
|
|
continue;
|
|
}
|
|
|
|
try {
|
|
// Node 実行環境用に絶対パスを生成し、動的 import
|
|
const full_path = path.resolve(__dirname, relative_config_path);
|
|
const file_url = pathToFileURL(full_path).href;
|
|
const plugin_config = await import(file_url);
|
|
|
|
if (plugin_config.configs?.alias) {
|
|
for (const [alias_key, alias_relative_path] of Object.entries(plugin_config.configs.alias)) {
|
|
aliases[alias_key] = path.resolve(
|
|
__dirname,
|
|
"src-ui/plugins",
|
|
entry_path,
|
|
alias_relative_path
|
|
);
|
|
}
|
|
}
|
|
} catch (error) {
|
|
console.error(
|
|
`Error loading alias config for plugin ${plugin.plugin_id}:`,
|
|
error
|
|
);
|
|
}
|
|
}
|
|
|
|
return aliases;
|
|
}; |