AppFlowy/frontend/appflowy_web_app/vite.config.ts

156 lines
4.6 KiB
TypeScript
Raw Normal View History

import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import svgr from 'vite-plugin-svgr';
import { visualizer } from 'rollup-plugin-visualizer';
import usePluginImport from 'vite-plugin-importer';
import { totalBundleSize } from 'vite-plugin-total-bundle-size';
2024-05-17 10:23:29 +00:00
import path from 'path';
import istanbul from 'vite-plugin-istanbul';
2024-05-17 10:23:29 +00:00
const resourcesPath = path.resolve(__dirname, '../resources');
const isDev = process.env.NODE_ENV === 'development';
// https://vitejs.dev/config/
export default defineConfig({
plugins: [
react(),
svgr({
svgrOptions: {
prettier: false,
plugins: ['@svgr/plugin-svgo', '@svgr/plugin-jsx'],
icon: true,
svgoConfig: {
multipass: true,
plugins: [
{
name: 'preset-default',
params: {
overrides: {
removeViewBox: false,
},
},
},
2024-08-27 02:59:31 +00:00
{
name: 'prefixIds',
params: {
prefix: (node, { path }) => {
const fileName = path?.split('/').pop()?.split('.')[0];
return `${fileName}-`;
},
},
},
],
},
svgProps: {
role: 'img',
},
replaceAttrValues: {
'#333': 'currentColor',
2024-08-27 02:59:31 +00:00
'black': 'currentColor',
},
},
}),
istanbul({
cypress: true,
requireEnv: false,
2024-06-06 09:48:58 +00:00
include: ['src/**/*'],
exclude: [
'**/__tests__/**/*',
'cypress/**/*',
'node_modules/**/*',
'src/application/services/tauri-services/**/*',
],
}),
usePluginImport({
libraryName: '@mui/icons-material',
libraryDirectory: '',
camel2DashComponentName: false,
style: false,
}),
process.env.ANALYZE_MODE
? visualizer({
2024-08-27 02:59:31 +00:00
emitFile: true,
})
: undefined,
process.env.ANALYZE_MODE
? totalBundleSize({
2024-08-27 02:59:31 +00:00
fileNameRegex: /\.(js|css)$/,
calculateGzip: false,
})
: undefined,
],
// Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build`
// prevent vite from obscuring rust errors
clearScreen: false,
// tauri expects a fixed port, fail if that port is not available
server: {
port: !!process.env.TAURI_PLATFORM ? 5173 : process.env.PORT ? parseInt(process.env.PORT) : 3000,
strictPort: true,
watch: {
ignored: ['node_modules'],
},
cors: false,
},
envPrefix: ['AF', 'TAURI_'],
2024-05-23 08:35:45 +00:00
esbuild: {
pure: !isDev ? ['console.log', 'console.debug', 'console.info', 'console.trace'] : [],
2024-05-23 08:35:45 +00:00
},
build: !!process.env.TAURI_PLATFORM
? {
2024-08-27 02:59:31 +00:00
// Tauri supports es2021
target: process.env.TAURI_PLATFORM === 'windows' ? 'chrome105' : 'safari13',
// don't minify for debug builds
minify: !process.env.TAURI_DEBUG ? 'esbuild' : false,
// produce sourcemaps for debug builds
sourcemap: !!process.env.TAURI_DEBUG,
}
: {
2024-08-27 02:59:31 +00:00
target: `esnext`,
reportCompressedSize: true,
sourcemap: isDev,
rollupOptions: !isDev
? {
output: {
chunkFileNames: 'static/js/[name]-[hash].js',
entryFileNames: 'static/js/[name]-[hash].js',
assetFileNames: 'static/[ext]/[name]-[hash].[ext]',
manualChunks (id) {
if (
id.includes('/react@') ||
id.includes('/react-dom@') ||
id.includes('/react-is@') ||
id.includes('/yjs@') ||
id.includes('/y-indexeddb@') ||
id.includes('/dexie') ||
id.includes('/redux') ||
id.includes('/react-custom-scrollbars') ||
id.includes('/dayjs') ||
id.includes('/smooth-scroll-into-view-if-needed') ||
id.includes('/react-virtualized-auto-sizer') ||
id.includes('/react-window')
) {
return 'common';
}
},
},
}
: {},
},
resolve: {
alias: [
{ find: 'src/', replacement: `${__dirname}/src/` },
{ find: '@/', replacement: `${__dirname}/src/` },
{
find: '$client-services',
replacement: !!process.env.TAURI_PLATFORM
? `${__dirname}/src/application/services/tauri-services`
: `${__dirname}/src/application/services/js-services`,
},
2024-05-17 10:23:29 +00:00
{ find: '$icons', replacement: `${resourcesPath}/flowy_icons/` },
],
},
optimizeDeps: {
include: ['react', 'react-dom', 'react-katex'],
},
});