[Optimization] Minify json files in build directory (after beta rebase) (#3214)
* add and use minify-json vite plugin it minifies all the json files in the given directorties (currently `/dist/images` and `/dist/battle-anim`). That way we can work with the beautified jsons but the users retrieve the minified ones. * bump vite to v5 to fix typedoc issue https://github.com/vitejs/vite/issues/15714
This commit is contained in:
parent
b573076789
commit
d3e5a68f10
File diff suppressed because it is too large
Load Diff
|
@ -37,7 +37,7 @@
|
||||||
"typedoc": "^0.26.4",
|
"typedoc": "^0.26.4",
|
||||||
"typescript": "^5.5.3",
|
"typescript": "^5.5.3",
|
||||||
"typescript-eslint": "^7.10.0",
|
"typescript-eslint": "^7.10.0",
|
||||||
"vite": "^4.5.0",
|
"vite": "^5.3.4",
|
||||||
"vite-plugin-fs": "^0.4.4",
|
"vite-plugin-fs": "^0.4.4",
|
||||||
"vite-tsconfig-paths": "^4.3.2",
|
"vite-tsconfig-paths": "^4.3.2",
|
||||||
"vitest": "^1.4.0",
|
"vitest": "^1.4.0",
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
import path from "path";
|
||||||
|
import fs from "fs";
|
||||||
|
import { type Plugin as VitePlugin } from "vite";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Crawl a directory (recursively if wanted) for json files and minifies found ones.
|
||||||
|
* @param dir the directory to crawl
|
||||||
|
* @param recursive if true, will crawl subdirectories
|
||||||
|
*/
|
||||||
|
function applyToDir(dir: string, recursive?: boolean) {
|
||||||
|
const files = fs.readdirSync(dir).filter((file) => !/^\..*/.test(file));
|
||||||
|
|
||||||
|
for (const file of files) {
|
||||||
|
const filePath = path.join(dir, file);
|
||||||
|
const stat = fs.lstatSync(filePath);
|
||||||
|
|
||||||
|
if (stat.isDirectory() && recursive) {
|
||||||
|
applyToDir(filePath, recursive); // only if recursive is true
|
||||||
|
} else if (path.extname(file) === ".json") {
|
||||||
|
const contents = fs.readFileSync(filePath, "utf8");
|
||||||
|
const minifiedContent = JSON.stringify(JSON.parse(contents));
|
||||||
|
|
||||||
|
fs.writeFileSync(filePath, minifiedContent, "utf8");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Plugin to mnify json files in the build folder after the bundling is done.
|
||||||
|
* @param basePath base path/es starting inside the build dir (e.g. will always start with "/dist" if dist is the build dir)
|
||||||
|
* @param recursive if true, will crawl subdirectories
|
||||||
|
*/
|
||||||
|
export function minifyJsonPlugin(basePath: string | string[], recursive?: boolean): VitePlugin {
|
||||||
|
let buildDir = "dist"; // Default build dir
|
||||||
|
|
||||||
|
return {
|
||||||
|
name: "flx-minify-json",
|
||||||
|
configResolved(config) {
|
||||||
|
buildDir = config.build.outDir; // Read the build output directory from Vite config
|
||||||
|
},
|
||||||
|
async closeBundle() {
|
||||||
|
console.log("Minifying JSON files...");
|
||||||
|
const basePathes = Array.isArray(basePath) ? basePath : [basePath];
|
||||||
|
|
||||||
|
basePathes.forEach((basePath) => {
|
||||||
|
const baseDir = path.resolve(buildDir, basePath);
|
||||||
|
if (fs.existsSync(baseDir)) {
|
||||||
|
applyToDir(baseDir, recursive);
|
||||||
|
} else {
|
||||||
|
console.error(`Path ${baseDir} does not exist!`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
console.log("Finished minifying JSON files!");
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,8 +1,12 @@
|
||||||
import { defineConfig, loadEnv } from 'vite';
|
import { defineConfig, loadEnv } from 'vite';
|
||||||
import tsconfigPaths from 'vite-tsconfig-paths';
|
import tsconfigPaths from 'vite-tsconfig-paths';
|
||||||
|
import { minifyJsonPlugin } from "./src/plugins/vite/vite-minify-json-plugin";
|
||||||
|
|
||||||
export const defaultConfig = {
|
export const defaultConfig = {
|
||||||
plugins: [tsconfigPaths() as any],
|
plugins: [
|
||||||
|
tsconfigPaths() as any,
|
||||||
|
minifyJsonPlugin(["images", "battle-anims"], true)
|
||||||
|
],
|
||||||
clearScreen: false,
|
clearScreen: false,
|
||||||
build: {
|
build: {
|
||||||
minify: 'esbuild' as const,
|
minify: 'esbuild' as const,
|
||||||
|
|
Loading…
Reference in New Issue