obsidian-book-tracker/vite.config.mts

99 lines
2.3 KiB
TypeScript

import { UserConfig, defineConfig } from "vite";
import { svelte } from "@sveltejs/vite-plugin-svelte";
import manifest from "./manifest.json";
import fs from "fs/promises";
import path from "path";
import builtins from "builtin-modules";
export default defineConfig(async ({ mode }) => {
const { resolve } = path;
const prod = mode === "production";
return {
plugins: [
svelte(),
{
name: "postbuild-commands",
async closeBundle() {
if (prod) return;
if (!process.env.OBSIDIAN_PLUGIN_DIR) {
console.log(
"Set OBSIDIAN_PLUGIN_DIR in the .env file to plugin directory to copy files to."
);
return;
}
const dist =
process.env.OBSIDIAN_PLUGIN_DIR +
"/" +
manifest.id +
"-dev";
await fs.mkdir(dist, { recursive: true });
const copy = async (src: string, dist: string) => {
await fs.copyFile(src, path.resolve(dist, src));
};
await Promise.all([
await copy("./main.js", dist),
await copy("./styles.css", dist),
await copy("./manifest.json", dist),
]);
console.log("Copied output files to", dist);
},
},
],
resolve: {
alias: {
"@components": path.resolve(__dirname, "./src/components"),
"@data-sources": path.resolve(__dirname, "./src/data-sources"),
"@settings": path.resolve(__dirname, "./src/settings"),
"@utils": path.resolve(__dirname, "./src/utils"),
"@views": path.resolve(__dirname, "./src/views"),
"@src": path.resolve(__dirname, "./src"),
},
},
build: {
lib: {
entry: resolve(__dirname, "src/main.ts"),
name: "main",
fileName: () => "main.js",
formats: ["cjs"],
},
minify: prod,
sourcemap: prod ? false : "inline",
cssCodeSplit: false,
emptyOutDir: false,
outDir: "dist",
rollupOptions: {
input: {
main: resolve(__dirname, "src/main.ts"),
},
output: {
entryFileNames: "main.js",
assetFileNames: "styles.css",
},
external: [
"obsidian",
"electron",
"@codemirror/autocomplete",
"@codemirror/collab",
"@codemirror/commands",
"@codemirror/language",
"@codemirror/lint",
"@codemirror/search",
"@codemirror/state",
"@codemirror/view",
"@lezer/common",
"@lezer/highlight",
"@lezer/lr",
...builtins,
],
},
},
} as UserConfig;
});