65 lines
2.0 KiB
TypeScript
65 lines
2.0 KiB
TypeScript
import react from "@vitejs/plugin-react";
|
|
import { defineConfig, loadEnv } from "vite";
|
|
import eslintPlugin from "vite-plugin-eslint";
|
|
import istanbul from "vite-plugin-istanbul";
|
|
import svgr from "vite-plugin-svgr";
|
|
import tsconfigPaths from "vite-tsconfig-paths";
|
|
|
|
// @ts-ignore
|
|
export default defineConfig(({ mode }) => {
|
|
const env = loadEnv(mode, "env");
|
|
const isCoverage = process.env.VITE_COVERAGE === "true";
|
|
const sourcemap = isCoverage ? "inline" : undefined;
|
|
|
|
const htmlPlugin = () => {
|
|
return {
|
|
name: "html-transform",
|
|
transformIndexHtml(html: string) {
|
|
return html.replace(/%(.*?)%/g, function (match, p1) {
|
|
return env[p1];
|
|
});
|
|
},
|
|
};
|
|
};
|
|
|
|
const istanbulPlugin = isCoverage
|
|
? istanbul({
|
|
include: "src/*",
|
|
exclude: ["node_modules"],
|
|
extension: [".js", ".jsx", ".ts", ".tsx"],
|
|
checkProd: false,
|
|
requireEnv: true,
|
|
})
|
|
: undefined;
|
|
|
|
return {
|
|
base: "./",
|
|
build: {
|
|
sourcemap,
|
|
outDir: "../internal/server/public_html",
|
|
emptyOutDir: true,
|
|
assetsDir: "static",
|
|
rollupOptions: {
|
|
output: {
|
|
entryFileNames: `static/js/[name].[hash].js`,
|
|
chunkFileNames: `static/js/[name].[hash].js`,
|
|
assetFileNames: ({ name }) => {
|
|
if (name && name.endsWith(".css")) {
|
|
return "static/css/[name].[hash].[ext]";
|
|
}
|
|
|
|
return "static/media/[name].[hash].[ext]";
|
|
},
|
|
},
|
|
},
|
|
},
|
|
server: {
|
|
open: false,
|
|
hmr: {
|
|
clientPort: env.VITE_HMR_PORT || 3000,
|
|
},
|
|
},
|
|
plugins: [eslintPlugin({ cache: false }), htmlPlugin(), istanbulPlugin, react(), svgr(), tsconfigPaths()],
|
|
};
|
|
});
|