Files
Rasadyar_FrontEnd/vite.config.js
2026-01-27 13:34:29 +03:30

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", "rasadyaar.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": {},
},
});