Files
sori.studio/nuxt.config.js
zenn 3623305119 v1.3.3: 자체 최소 통계 및 스플래시 localStorage 정리
- 일별 익명 방문자 해시·사이트/게시물 통계(030 마이그레이션)
- POST /api/analytics/pageview, 관리자 analytics API, 클라이언트 트래커
- 관리자 대시보드 통계 카드·인기 게시물 Top 5
- 스플래시: SITE_BRAND_LOGO_TEXT localStorage 제거
2026-05-20 12:15:13 +09:00

81 lines
2.5 KiB
JavaScript

// https://nuxt.com/docs/api/configuration/nuxt-config
import { buildSiteBootInlineScript } from './lib/site-theme-init.js'
export default defineNuxtConfig({
compatibilityDate: '2026-04-29',
future: {
compatibilityVersion: 3
},
devtools: {
enabled: false
},
modules: ['./modules/nuxt-ssr-paths-write.mjs', '@nuxtjs/tailwindcss'],
/**
* 기본 cssPath(assets/css/tailwind.css)가 없으면 패키지의 tailwind.css가 먼저 주입되어
* main.css와 @tailwind 이중 로딩·스타일 꼬임이 날 수 있어 엔트리를 main.css로 통일한다.
*/
tailwindcss: {
cssPath: '~/assets/css/main.css'
},
components: [
{
path: '~/components',
pathPrefix: false
}
],
experimental: {
appManifest: false
},
vite: {
server: {
watch: {
usePolling: true,
interval: 150
}
}
},
css: ['~/assets/css/main.css'],
app: {
head: {
htmlAttrs: {
lang: 'ko'
},
title: 'sori.studio',
meta: [
{ name: 'description', content: 'sori.studio 개인 블로그' },
{ name: 'viewport', content: 'width=device-width, initial-scale=1' }
],
script: [
{
key: 'site-boot',
type: 'text/javascript',
tagPriority: 'critical',
innerHTML: buildSiteBootInlineScript(process.env.NUXT_PUBLIC_SITE_TITLE || 'sori.studio')
}
]
}
},
runtimeConfig: {
databaseUrl: process.env.DATABASE_URL || '',
databaseName: process.env.DATABASE_NAME || '',
adminEmail: process.env.ADMIN_EMAIL || '',
adminPassword: process.env.ADMIN_PASSWORD || '',
memberSessionSecret: process.env.MEMBER_SESSION_SECRET || '',
analyticsHashSecret: process.env.ANALYTICS_HASH_SECRET || '',
resendApiKey: process.env.RESEND_API_KEY || '',
resendFromEmail: process.env.RESEND_FROM_EMAIL || '',
emailOtpPepper: process.env.EMAIL_OTP_PEPPER || '',
uploadDir: process.env.UPLOAD_DIR || '/uploads',
maxFileSize: Number(process.env.MAX_FILE_SIZE || 10485760),
avatarMinWidth: Number(process.env.AVATAR_MIN_WIDTH || 96),
avatarMinHeight: Number(process.env.AVATAR_MIN_HEIGHT || 96),
avatarMaxWidth: Number(process.env.AVATAR_MAX_WIDTH || 512),
avatarMaxHeight: Number(process.env.AVATAR_MAX_HEIGHT || 512),
avatarWebpQuality: Number(process.env.AVATAR_WEBP_QUALITY || 82),
public: {
siteUrl: process.env.NUXT_PUBLIC_SITE_URL || 'https://sori.studio',
siteTitle: process.env.NUXT_PUBLIC_SITE_TITLE || 'sori.studio'
}
}
})