schon/storefront/nuxt.config.ts
Alexandr SaVBaD Waltz 129ad1a6fa Features: 1) Build standalone pages for search, contact, catalog, category, brand, product, and home with localized metadata and scoped styles; 2) Add extensive TypeScript definitions for API and app-level structures, including products, orders, brands, and categories; 3) Implement i18n configuration with dynamic browser language detection and fallback system;
Fixes: None;

Extra: 1) Create Pinia stores for app, user, category, and company management; 2) Add utility functions for error handling and category slug lookups; 3) Include German locale file and robots.txt for improved SEO and accessibility; 4) Add SVG assets and improve general folder structure for better maintainability.
2025-06-27 00:10:35 +03:00

99 lines
No EOL
2.5 KiB
TypeScript

import { defineNuxtConfig } from 'nuxt/config';
import { i18nConfig } from './config/i18n';
import {fileURLToPath, URL} from "node:url";
import { resolve } from 'node:path';
export default defineNuxtConfig({
ssr: true,
devtools: { enabled: true },
typescript: { strict: true },
modules: [
"@nuxtjs/i18n",
"@nuxt/icon",
"@pinia/nuxt",
"@nuxtjs/apollo",
"@vueuse/nuxt",
"@element-plus/nuxt",
"nuxt-marquee",
"@nuxt/image"
],
i18n: i18nConfig,
apollo: {
autoImports: true,
clients: {
default: {
httpEndpoint: `https://api.${process.env.EVIBES_BASE_DOMAIN}/graphql/`,
connectToDevTools: true,
authType: 'Bearer',
authHeader: 'X-EVIBES-AUTH',
tokenStorage: 'cookie',
tokenName: `${process.env.EVIBES_PROJECT_NAME?.toLowerCase()}-access`,
}
},
},
runtimeConfig: {
public: {
evibesProjectName: process.env.EVIBES_PROJECT_NAME,
evibesBaseDomain: process.env.EVIBES_BASE_DOMAIN
},
},
app: {
head: {
charset: "utf-8",
viewport: "width=device-width, initial-scale=1",
title: process.env.EVIBES_PROJECT_NAME,
titleTemplate: `${process.env.EVIBES_PROJECT_NAME} | %s`,
link: [
{ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' },
]
},
pageTransition: {
name: 'opacity',
mode: 'out-in'
}
},
css: [
'./assets/styles/main.scss',
'./assets/styles/global/fonts.scss',
'swiper/css',
'swiper/css/effect-fade',
],
alias: {
'styles': fileURLToPath(new URL("./assets/styles", import.meta.url)),
'images': fileURLToPath(new URL("./assets/images", import.meta.url)),
'icons': fileURLToPath(new URL("./assets/icons", import.meta.url)),
},
vite: {
envDir: '../',
envPrefix: 'EVIBES_',
css: {
preprocessorOptions: {
scss: {
additionalData: `
@use "@/assets/styles/global/variables.scss" as *;
@use "@/assets/styles/global/mixins.scss" as *;
`
}
}
}
},
image: {
domains: [`https://api.${process.env.EVIBES_BASE_DOMAIN}`]
},
hooks: {
'pages:extend'(pages) {
pages.push(
{
name: 'activate-user',
path: '/activate-user',
file: resolve(__dirname, 'pages/index.vue')
},
{
name: 'reset-password',
path: '/reset-password',
file: resolve(__dirname, 'pages/index.vue')
}
)
}
}
})