87 lines
1.9 KiB
JavaScript
87 lines
1.9 KiB
JavaScript
import { defineConfig } from 'vite'
|
|
import vue from '@vitejs/plugin-vue'
|
|
import path from 'path'
|
|
import { VitePWA } from 'vite-plugin-pwa'
|
|
|
|
export default defineConfig(async ({ mode }) => {
|
|
const isDev = mode === 'development'
|
|
const frappeui = await importFrappeUIPlugin(isDev)
|
|
|
|
const config = {
|
|
define: {
|
|
__VUE_PROD_HYDRATION_MISMATCH_DETAILS__: 'false',
|
|
},
|
|
plugins: [
|
|
frappeui({
|
|
frappeProxy: true,
|
|
lucideIcons: true,
|
|
jinjaBootData: true,
|
|
buildConfig: {
|
|
indexHtmlPath: '../lms/www/_lms.html',
|
|
},
|
|
}),
|
|
vue(),
|
|
VitePWA({
|
|
registerType: 'autoUpdate',
|
|
devOptions: {
|
|
enabled: false,
|
|
},
|
|
workbox: {
|
|
cleanupOutdatedCaches: true,
|
|
maximumFileSizeToCacheInBytes: 5 * 1024 * 1024,
|
|
globDirectory: '/assets/lms/frontend',
|
|
globPatterns: ['**/*.{js,ts,css,html,svg}'],
|
|
runtimeCaching: [
|
|
{
|
|
urlPattern: ({ request }) =>
|
|
request.destination === 'document',
|
|
handler: 'NetworkFirst',
|
|
options: {
|
|
cacheName: 'html-cache',
|
|
},
|
|
},
|
|
],
|
|
},
|
|
manifest: false,
|
|
}),
|
|
],
|
|
server: {
|
|
host: '0.0.0.0', // Accept connections from any network interface
|
|
allowedHosts: true,
|
|
},
|
|
resolve: {
|
|
alias: {
|
|
'@': path.resolve(__dirname, 'src'),
|
|
},
|
|
},
|
|
optimizeDeps: {
|
|
include: [
|
|
'feather-icons',
|
|
'tailwind.config.js',
|
|
'interactjs',
|
|
'highlight.js',
|
|
'plyr',
|
|
],
|
|
exclude: mode === 'production' ? [] : ['frappe-ui'],
|
|
},
|
|
}
|
|
return config
|
|
})
|
|
|
|
async function importFrappeUIPlugin(isDev) {
|
|
if (isDev) {
|
|
try {
|
|
const module = await import('../frappe-ui/vite')
|
|
return module.default
|
|
} catch (error) {
|
|
console.warn(
|
|
'Local frappe-ui not found, falling back to npm package:',
|
|
error.message
|
|
)
|
|
}
|
|
}
|
|
// Fall back to npm package if local import fails
|
|
const module = await import('frappe-ui/vite')
|
|
return module.default
|
|
}
|