133 lines
4.0 KiB
JavaScript
133 lines
4.0 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 CompressionPlugin from 'vite-plugin-compression';
|
|
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 reactVirtualized() {
|
|
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) => {
|
|
// viteConfig is the current Vite resolved config
|
|
return { 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: [
|
|
{ //TODO:AIO Ensure that these are correct for Rome and IO.
|
|
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',
|
|
},
|
|
}),
|
|
reactVirtualized(),
|
|
react(),
|
|
// CompressionPlugin(), //Cloudfront already compresses assets, so not needed.
|
|
],
|
|
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',
|
|
},
|
|
},
|
|
},
|
|
});
|