189 lines
4.8 KiB
TypeScript
189 lines
4.8 KiB
TypeScript
import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite'
|
||
import svgLoader from 'vite-svg-loader'
|
||
import vuetify from 'vite-plugin-vuetify'
|
||
import { fileURLToPath } from 'node:url'
|
||
|
||
// https://nuxt.com/docs/api/configuration/nuxt-config
|
||
export default defineNuxtConfig({
|
||
app: {
|
||
head: {
|
||
titleTemplate: '%s - NuxtJS Admin Template',
|
||
title: 'Vuexy',
|
||
|
||
link: [{
|
||
rel: 'icon',
|
||
type: 'image/x-icon',
|
||
href: process.env.NUXT_APP_BASE_URL+'/favicon.ico',
|
||
}],
|
||
},
|
||
},
|
||
|
||
devtools: {
|
||
enabled: true,
|
||
},
|
||
|
||
css: [
|
||
'@core/scss/template/index.scss',
|
||
'@styles/styles.scss',
|
||
'@/plugins/iconify/icons.css',
|
||
],
|
||
|
||
/*
|
||
❗ Please read the docs before updating runtimeConfig
|
||
https://nuxt.com/docs/guide/going-further/runtime-config
|
||
*/
|
||
runtimeConfig: {
|
||
// Private keys are only available on the server
|
||
AUTH_ORIGIN: process.env.AUTH_ORIGIN,
|
||
AUTH_SECRET: process.env.AUTH_SECRET,
|
||
|
||
// Public keys that are exposed to the client.
|
||
public: {
|
||
apiBaseUrl: process.env.NUXT_PUBLIC_API_BASE_URL || '/api',
|
||
mapboxAccessToken: process.env.MAPBOX_ACCESS_TOKEN,
|
||
},
|
||
},
|
||
components: {
|
||
dirs: [{
|
||
path: '@/@core/components',
|
||
pathPrefix: false,
|
||
}, {
|
||
path: '@/views/demos',
|
||
pathPrefix: false,
|
||
}, {
|
||
path: '~/components/global',
|
||
global: true,
|
||
}, {
|
||
path: '~/components',
|
||
pathPrefix: false,
|
||
}],
|
||
},
|
||
|
||
auth: {
|
||
baseURL: process.env.AUTH_ORIGIN,
|
||
globalAppMiddleware: false,
|
||
|
||
provider: {
|
||
type: 'authjs',
|
||
},
|
||
},
|
||
|
||
plugins: [
|
||
'@/plugins/casl/index.js',
|
||
'@/plugins/vuetify/index.js',
|
||
'@/plugins/iconify/index.js',
|
||
],
|
||
|
||
imports: {
|
||
dirs: ['./@core/utils', './@core/composable/', './plugins/*/composables/*'],
|
||
},
|
||
|
||
hooks: {},
|
||
|
||
experimental: {
|
||
typedPages: true,
|
||
},
|
||
|
||
typescript: {
|
||
tsConfig: {
|
||
compilerOptions: {
|
||
paths: {
|
||
'@/*': ['../*'],
|
||
'@themeConfig': ['../themeConfig.js'],
|
||
'@layouts/*': ['../@layouts/*'],
|
||
'@layouts': ['../@layouts'],
|
||
'@core/*': ['../@core/*'],
|
||
'@core': ['../@core'],
|
||
'@images/*': ['../assets/images/*'],
|
||
'@styles/*': ['../assets/styles/*'],
|
||
'@validators': ['../@core/utils/validators'],
|
||
'@db/*': ['../server/fake-db/*'],
|
||
'@api-utils/*': ['../server/utils/*'],
|
||
},
|
||
},
|
||
},
|
||
},
|
||
|
||
// ℹ️ Disable source maps until this is resolved: https://github.com/vuetifyjs/vuetify-loader/issues/290
|
||
sourcemap: {
|
||
server: false,
|
||
client: false,
|
||
},
|
||
|
||
alias: {
|
||
'@': fileURLToPath(new URL('.', import.meta.url)),
|
||
'@themeConfig': fileURLToPath(new URL('./themeConfig.js', import.meta.url)),
|
||
'@core': fileURLToPath(new URL('./@core', import.meta.url)),
|
||
'@layouts': fileURLToPath(new URL('./@layouts', import.meta.url)),
|
||
'@images': fileURLToPath(new URL('./assets/images/', import.meta.url)),
|
||
'@styles': fileURLToPath(new URL('./assets/styles/', import.meta.url)),
|
||
'@configured-variables': fileURLToPath(new URL('./assets/styles/variables/_template.scss', import.meta.url)),
|
||
'@db': fileURLToPath(new URL('./server/fake-db/', import.meta.url)),
|
||
'@api-utils': fileURLToPath(new URL('./server/utils/', import.meta.url)),
|
||
},
|
||
vue: {
|
||
compilerOptions: {
|
||
isCustomElement: tag => tag === 'swiper-container' || tag === 'swiper-slide',
|
||
},
|
||
},
|
||
|
||
vite: {
|
||
define: { 'process.env': {} },
|
||
|
||
resolve: {
|
||
alias: {
|
||
'@': fileURLToPath(new URL('.', import.meta.url)),
|
||
'@themeConfig': fileURLToPath(new URL('./themeConfig.js', import.meta.url)),
|
||
'@core': fileURLToPath(new URL('./@core', import.meta.url)),
|
||
'@layouts': fileURLToPath(new URL('./@layouts', import.meta.url)),
|
||
'@images': fileURLToPath(new URL('./assets/images/', import.meta.url)),
|
||
'@styles': fileURLToPath(new URL('./assets/styles/', import.meta.url)),
|
||
'@configured-variables': fileURLToPath(new URL('./assets/styles/variables/_template.scss', import.meta.url)),
|
||
'@db': fileURLToPath(new URL('./server/fake-db/', import.meta.url)),
|
||
'@api-utils': fileURLToPath(new URL('./server/utils/', import.meta.url)),
|
||
},
|
||
},
|
||
|
||
build: {
|
||
chunkSizeWarningLimit: 5000,
|
||
},
|
||
|
||
optimizeDeps: {
|
||
exclude: ['vuetify'],
|
||
entries: [
|
||
'./**/*.vue',
|
||
],
|
||
},
|
||
|
||
plugins: [
|
||
svgLoader(),
|
||
vuetify({
|
||
styles: {
|
||
configFile: 'assets/styles/variables/_vuetify.scss',
|
||
},
|
||
}),
|
||
],
|
||
},
|
||
|
||
build: {
|
||
transpile: ['vuetify'],
|
||
},
|
||
|
||
compatibilityDate: '2025-07-15',
|
||
|
||
i18n: {
|
||
vueI18n: '../i18n.config.js',
|
||
|
||
bundle: {
|
||
optimizeTranslationDirective: true,
|
||
},
|
||
},
|
||
|
||
modules: [
|
||
'@vueuse/nuxt',
|
||
'@nuxtjs/i18n',
|
||
'@nuxtjs/device',
|
||
'@sidebase/nuxt-auth',
|
||
'@pinia/nuxt',
|
||
],
|
||
}) |