149 lines
3.2 KiB
JavaScript
149 lines
3.2 KiB
JavaScript
import { defineConfig, transformWithEsbuild } from "vite";
|
|
import react from "@vitejs/plugin-react";
|
|
import { VitePWA } from "vite-plugin-pwa";
|
|
import path from "path";
|
|
|
|
export default defineConfig({
|
|
plugins: [
|
|
{
|
|
name: "load-js-files-as-jsx",
|
|
enforce: "pre",
|
|
async transform(code, id) {
|
|
if (!id.match(/src\/.*\.js$/)) return null;
|
|
return transformWithEsbuild(code, id, {
|
|
loader: "jsx",
|
|
jsx: "automatic",
|
|
});
|
|
},
|
|
},
|
|
react({
|
|
fastRefresh: true,
|
|
include: /\.js$/,
|
|
jsxRuntime: "automatic",
|
|
}),
|
|
VitePWA({
|
|
registerType: "autoUpdate",
|
|
includeAssets: [
|
|
"favicon.ico",
|
|
"android-chrome-192x192.png",
|
|
"android-chrome-512x512.png",
|
|
"apple-touch-icon.png",
|
|
"logo192.png",
|
|
"logo512.png",
|
|
],
|
|
manifest: {
|
|
short_name: "سامانه رصدیار",
|
|
name: "سامانه رصدیار",
|
|
icons: [
|
|
{
|
|
src: "/android-chrome-192x192.png",
|
|
sizes: "192x192",
|
|
type: "image/png",
|
|
},
|
|
{
|
|
src: "/android-chrome-512x512.png",
|
|
sizes: "512x512",
|
|
type: "image/png",
|
|
},
|
|
],
|
|
start_url: ".",
|
|
display: "standalone",
|
|
theme_color: "#000000",
|
|
background_color: "#ffffff",
|
|
},
|
|
workbox: {
|
|
globPatterns: [
|
|
"**/*.{js,css,html,ico,png,svg,jpg,jpeg,webp,woff,woff2}",
|
|
],
|
|
runtimeCaching: [
|
|
{
|
|
urlPattern: /^https:\/\/.*\.(?:png|jpg|jpeg|svg|gif|webp)$/,
|
|
handler: "CacheFirst",
|
|
options: {
|
|
cacheName: "images-cache",
|
|
expiration: {
|
|
maxEntries: 100,
|
|
maxAgeSeconds: 60 * 60 * 24 * 30,
|
|
},
|
|
},
|
|
},
|
|
],
|
|
},
|
|
}),
|
|
],
|
|
|
|
preview: {
|
|
allowedHosts: ["rasadyar.com", "rasadyar.net", "rasadyar.ir"],
|
|
},
|
|
|
|
// Resolve configuration
|
|
resolve: {
|
|
alias: {
|
|
"@": path.resolve(__dirname, "./src"),
|
|
},
|
|
},
|
|
|
|
server: {
|
|
port: 3000,
|
|
open: true,
|
|
host: true,
|
|
hmr: {
|
|
overlay: true,
|
|
},
|
|
watch: {
|
|
usePolling: false,
|
|
interval: 100,
|
|
},
|
|
},
|
|
|
|
build: {
|
|
outDir: "build",
|
|
sourcemap: false,
|
|
|
|
chunkSizeWarningLimit: 1000,
|
|
rollupOptions: {
|
|
output: {
|
|
manualChunks: {
|
|
"react-vendor": ["react", "react-dom", "react-router-dom"],
|
|
"mui-vendor": [
|
|
"@mui/material",
|
|
"@mui/icons-material",
|
|
"@mui/lab",
|
|
"@emotion/react",
|
|
"@emotion/styled",
|
|
],
|
|
"redux-vendor": ["@reduxjs/toolkit", "react-redux", "redux-persist"],
|
|
"chart-vendor": [
|
|
"chart.js",
|
|
"react-chartjs-2",
|
|
"echarts",
|
|
"echarts-for-react",
|
|
],
|
|
},
|
|
},
|
|
},
|
|
},
|
|
|
|
optimizeDeps: {
|
|
include: [
|
|
"react",
|
|
"react-dom",
|
|
"react-router-dom",
|
|
"@mui/material",
|
|
"@mui/icons-material",
|
|
"@reduxjs/toolkit",
|
|
"react-redux",
|
|
],
|
|
esbuildOptions: {
|
|
loader: {
|
|
".js": "jsx",
|
|
},
|
|
jsx: "automatic",
|
|
},
|
|
},
|
|
|
|
define: {
|
|
"process.env": {},
|
|
},
|
|
});
|