mirror of
https://github.com/certimate-go/certimate.git
synced 2026-09-24 23:10:13 +08:00
94 lines
2.6 KiB
TypeScript
94 lines
2.6 KiB
TypeScript
import path from "node:path";
|
|
|
|
import tailwindcssPlugin from "@tailwindcss/vite";
|
|
import legacyPlugin from "@vitejs/plugin-legacy";
|
|
import reactPlugin from "@vitejs/plugin-react";
|
|
import fs from "fs-extra";
|
|
import { type Plugin, defineConfig } from "vite";
|
|
|
|
const preserveFilesPlugin = (filesToPreserve: string[]): Plugin => {
|
|
return {
|
|
name: "preserve-files",
|
|
apply: "build",
|
|
buildStart() {
|
|
// 在构建开始时将要保留的文件或目录移动到临时位置
|
|
filesToPreserve.forEach((file) => {
|
|
const srcPath = path.resolve(__dirname, file);
|
|
const tempPath = path.resolve(__dirname, `node_modules/.tmp/build/${file}`);
|
|
if (fs.existsSync(srcPath)) {
|
|
fs.moveSync(srcPath, tempPath, { overwrite: true });
|
|
}
|
|
});
|
|
},
|
|
closeBundle() {
|
|
// 在构建完成后将临时位置的文件或目录移回原来的位置
|
|
filesToPreserve.forEach((file) => {
|
|
const srcPath = path.resolve(__dirname, file);
|
|
const tempPath = path.resolve(__dirname, `node_modules/.tmp/build/${file}`);
|
|
if (fs.existsSync(tempPath)) {
|
|
fs.moveSync(tempPath, srcPath, { overwrite: true });
|
|
}
|
|
});
|
|
},
|
|
};
|
|
};
|
|
|
|
export default defineConfig(({ command }) => {
|
|
let appVersion = undefined;
|
|
try {
|
|
const content = fs.readFileSync(path.resolve(__dirname, "../internal/app/app.go"), "utf-8");
|
|
const matches = content.match(/AppVersion\s+=\s+"(.+?)"/);
|
|
if (matches) {
|
|
appVersion = matches[1];
|
|
if (command === "serve") {
|
|
appVersion += "-dev";
|
|
}
|
|
console.info("[certimate] AppVersion is " + appVersion);
|
|
} else {
|
|
throw new Error("AppVersion not found in '/internal/app/app.go'");
|
|
}
|
|
} catch (err) {
|
|
throw new Error("Could not read app version: " + (err as Error).message);
|
|
}
|
|
|
|
return {
|
|
define: {
|
|
__APP_VERSION__: JSON.stringify(appVersion),
|
|
},
|
|
build: {
|
|
rolldownOptions: {
|
|
output: {
|
|
manualChunks(id) {
|
|
if (id.includes("/src/i18n/")) {
|
|
return "locales";
|
|
}
|
|
},
|
|
},
|
|
},
|
|
},
|
|
plugins: [
|
|
reactPlugin({}),
|
|
legacyPlugin({
|
|
targets: ["defaults", "not IE 11"],
|
|
modernTargets: "chrome>=111, firefox>=113, safari>=15.4",
|
|
polyfills: true,
|
|
modernPolyfills: true,
|
|
renderLegacyChunks: false,
|
|
renderModernChunks: true,
|
|
}),
|
|
tailwindcssPlugin(),
|
|
preserveFilesPlugin(["dist/.gitkeep"]),
|
|
],
|
|
resolve: {
|
|
alias: {
|
|
"@": path.resolve(__dirname, "./src"),
|
|
},
|
|
},
|
|
server: {
|
|
proxy: {
|
|
"/api": "http://127.0.0.1:8090",
|
|
},
|
|
},
|
|
};
|
|
});
|