Files
obsidian-livesync/vite.config.ts
vorotamoroz 1bde2b2ff1 Fixed an issue where the StorageEventManager
Build by Vite is now testing
2026-02-19 04:18:18 +00:00

165 lines
5.8 KiB
TypeScript

import { defineConfig } from "vitest/config";
import { svelte } from "@sveltejs/vite-plugin-svelte";
import { sveltePreprocess } from "svelte-preprocess";
import inlineWorkerPlugin from "esbuild-plugin-inline-worker";
import copy from "rollup-plugin-copy";
import path from "path";
import { fileURLToPath } from "node:url";
import fs from "node:fs";
import { platform } from "node:process";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const manifestJson = JSON.parse(fs.readFileSync("./manifest.json") + "");
const packageJson = JSON.parse(fs.readFileSync("./package.json") + "");
const updateInfo = JSON.stringify(fs.readFileSync("./updates.md") + "");
// const moduleAliasPlugin = {
// name: "module-alias",
// setup(build: any) {
// build.onResolve({ filter: /.(dev)(.ts|)$/ }, (args: any) => {
// // console.log(args.path);
// if (prod) {
// const prodTs = args.path.replace(".dev", ".prod");
// const statFile = prodTs.endsWith(".ts") ? prodTs : prodTs + ".ts";
// const realPath = path.join(args.resolveDir, statFile);
// console.log(`Checking ${statFile}`);
// if (fs.existsSync(realPath)) {
// console.log(`Replaced ${args.path} with ${prodTs}`);
// return {
// path: realPath,
// namespace: "file",
// };
// }
// }
// return null;
// });
// build.onResolve({ filter: /.(platform)(.ts|)$/ }, (args: any) => {
// // console.log(args.path);
// if (prod) {
// const prodTs = args.path.replace(".platform", ".obsidian");
// const statFile = prodTs.endsWith(".ts") ? prodTs : prodTs + ".ts";
// const realPath = path.join(args.resolveDir, statFile);
// console.log(`Checking ${statFile}`);
// if (fs.existsSync(realPath)) {
// console.log(`Replaced ${args.path} with ${prodTs}`);
// return {
// path: realPath,
// namespace: "file",
// };
// }
// }
// return null;
// });
// },
// };
const externals = [
"obsidian",
"electron",
"crypto",
"@codemirror/autocomplete",
"@codemirror/collab",
"@codemirror/commands",
"@codemirror/language",
"@codemirror/lint",
"@codemirror/search",
"@codemirror/state",
"@codemirror/view",
"@lezer/common",
"@lezer/highlight",
"@lezer/lr",
];
const define = {
MANIFEST_VERSION: `"${manifestJson.version}"`,
PACKAGE_VERSION: `"${packageJson.version}"`,
UPDATE_INFO: `${updateInfo}`,
global: "globalThis",
hostPlatform: `"${platform}"`,
};
const PATHS_TEST_INSTALL = process.env?.PATHS_TEST_INSTALL || "";
const PATH_TEST_INSTALL = PATHS_TEST_INSTALL.split(path.delimiter)
.map((p) => p.trim())
.filter((p) => p.length);
if (PATH_TEST_INSTALL) {
console.log(`Built files will be copied to ${PATH_TEST_INSTALL}`);
} else {
console.log(
"Development build: You can install the plug-in to Obsidian for testing by exporting the PATHS_TEST_INSTALL environment variable with the paths to your vault plugins directories separated by your system path delimiter (':' on Unix, ';' on Windows)."
);
}
import { terserOption } from "./terser_vite.config";
export default defineConfig(({ mode }) => {
const prod = mode === "production" || mode === "original";
let minify = prod ? "terser" : false;
let outFile = `main_vite.${prod ? "prod" : "dev"}.js`;
if (mode == "original") {
console.log("Building original unminified version");
minify = false;
outFile = `main_vite.original.js`;
}
outFile = `main.js`;
return {
plugins: [
// moduleAliasPlugin,
inlineWorkerPlugin({
external: externals,
treeShaking: true,
}),
svelte({
preprocess: sveltePreprocess(),
compilerOptions: { css: "injected", preserveComments: false },
}),
copy({
targets: ["manifest.json", "main.js", "styles.css"]
.map((file) => PATH_TEST_INSTALL.map((dest) => ({ src: file, dest: dest })))
.flat(),
// Copy after the build is complete
hook: "writeBundle",
verbose: true,
}),
],
resolve: {
alias: {
"@": path.resolve(__dirname, "./src"),
"@lib": path.resolve(__dirname, "./src/lib/src"),
src: path.resolve(__dirname, "./src"),
},
},
build: {
target: 'es2018',
commonjsOptions: {},
lib: {
entry: path.resolve(__dirname, "src/main.ts"),
name: "main",
fileName: () => outFile,
formats: ["cjs"], //
},
rollupOptions: {
external: externals,
output: {
globals: {
obsidian: "obsidian",
electron: "electron",
},
entryFileNames: outFile,
inlineDynamicImports: true,
manualChunks: undefined,
},
},
minify: minify ? "terser" : false,
// minify:false,
terserOptions: terserOption,
outDir: ".",
emptyOutDir: false,
sourcemap: prod ? false : "hidden",
},
define: define,
worker: {
format: "iife",
},
}
})