132 lines
3.9 KiB
JavaScript
132 lines
3.9 KiB
JavaScript
import react from "@vitejs/plugin-react";
|
|
import { promises as fsPromises } from "fs";
|
|
import { createRequire } from "module";
|
|
import * as path from "path";
|
|
import * as url from "url";
|
|
import { defineConfig } from "vite";
|
|
import { ViteEjsPlugin } from "vite-plugin-ejs";
|
|
import eslint from "vite-plugin-eslint";
|
|
import { VitePWA } from "vite-plugin-pwa";
|
|
import InstanceRenderManager from "./src/utils/instanceRenderMgr";
|
|
|
|
process.env.VITE_APP_GIT_SHA_DATE = new Date().toLocaleString("en-US", {
|
|
timeZone: "America/Los_Angeles"
|
|
});
|
|
|
|
const WRONG_CODE = `import { bpfrpt_proptype_WindowScroller } from "../WindowScroller.js";`;
|
|
|
|
function reactVirtualizedFix() {
|
|
return {
|
|
name: "flat:react-virtualized",
|
|
configResolved: async () => {
|
|
const require = createRequire(import.meta.url);
|
|
const reactVirtualizedPath = require.resolve("react-virtualized");
|
|
const { pathname: reactVirtualizedFilePath } = new url.URL(reactVirtualizedPath, import.meta.url);
|
|
const file = reactVirtualizedFilePath.replace(
|
|
path.join("dist", "commonjs", "index.js"),
|
|
path.join("dist", "es", "WindowScroller", "utils", "onScroll.js")
|
|
);
|
|
const code = await fsPromises.readFile(file, "utf-8");
|
|
const modified = code.replace(WRONG_CODE, "");
|
|
await fsPromises.writeFile(file, modified);
|
|
}
|
|
};
|
|
}
|
|
|
|
export default defineConfig({
|
|
base: "/",
|
|
plugins: [
|
|
ViteEjsPlugin((viteConfig) => ({ env: viteConfig.env })),
|
|
VitePWA({
|
|
injectRegister: "auto",
|
|
registerType: "prompt",
|
|
manifest: {
|
|
short_name: InstanceRenderManager({
|
|
instance: process.env.VITE_APP_INSTANCE,
|
|
imex: "ImEX Online",
|
|
rome: "Rome Online",
|
|
promanager: "ProManager"
|
|
}),
|
|
name: InstanceRenderManager({
|
|
instance: process.env.VITE_APP_INSTANCE,
|
|
imex: "ImEX Online",
|
|
rome: "Rome Online",
|
|
promanager: "ProManager"
|
|
}),
|
|
description: "The ultimate bodyshop management system.",
|
|
icons: [
|
|
{
|
|
src: InstanceRenderManager({
|
|
instance: process.env.VITE_APP_INSTANCE,
|
|
imex: "favicon.png",
|
|
rome: "ro-favicon.png",
|
|
promanager: "/pm/pm-favicon.ico"
|
|
}),
|
|
sizes: "64x64 32x32 24x24 16x16",
|
|
type: "image/x-icon"
|
|
},
|
|
{
|
|
src: InstanceRenderManager({
|
|
instance: process.env.VITE_APP_INSTANCE,
|
|
imex: "logo192.png",
|
|
rome: "logo192.png",
|
|
promanager: "/pm/pm-icon-192.png"
|
|
}),
|
|
type: "image/png",
|
|
sizes: "192x192"
|
|
},
|
|
{
|
|
src: InstanceRenderManager({
|
|
instance: process.env.VITE_APP_INSTANCE,
|
|
imex: "logo512.png",
|
|
rome: "ro-favicon.png",
|
|
promanager: "/pm/pm-icon-512.png"
|
|
}),
|
|
type: "image/png",
|
|
sizes: "512x512"
|
|
}
|
|
],
|
|
theme_color: InstanceRenderManager({
|
|
instance: process.env.VITE_APP_INSTANCE,
|
|
imex: "#1890ff",
|
|
rome: "#fff",
|
|
promanager: "#1d69a6"
|
|
}),
|
|
background_color: "#fff",
|
|
gcm_sender_id: "103953800507"
|
|
}
|
|
}),
|
|
reactVirtualizedFix(),
|
|
react(),
|
|
eslint()
|
|
// CompressionPlugin(), //Cloudfront already compresses assets, so not needed.
|
|
],
|
|
define: {
|
|
APP_VERSION: JSON.stringify(process.env.npm_package_version)
|
|
},
|
|
server: {
|
|
host: true,
|
|
port: 3000,
|
|
open: true
|
|
},
|
|
build: {
|
|
rollupOptions: {
|
|
output: {
|
|
manualChunks: {
|
|
antd: ["antd"],
|
|
"react-redux": ["react-redux"],
|
|
redux: ["redux"]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
optimizeDeps: {
|
|
include: ["react", "react-dom", "antd", "@apollo/client", "@reduxjs/toolkit", "axios"],
|
|
esbuildOptions: {
|
|
loader: {
|
|
".js": "jsx"
|
|
}
|
|
}
|
|
}
|
|
});
|