84 lines
3.3 KiB
TypeScript
84 lines
3.3 KiB
TypeScript
// Nuxt 설정 — SSG(정적 생성) 기반, nginx 정적 호스팅용
|
|
// https://nuxt.com/docs/api/configuration/nuxt-config
|
|
export default defineNuxtConfig({
|
|
compatibilityDate: '2025-05-30',
|
|
|
|
// 개발 도구 활성화 (운영 빌드에는 포함되지 않음)
|
|
devtools: { enabled: true },
|
|
|
|
// 모듈 — 상태 관리(Pinia), ESLint 통합
|
|
modules: ['@pinia/nuxt', '@nuxt/eslint'],
|
|
|
|
// 자동 임포트 디렉터리 확장 — CLAUDE.md 규칙(shared/utils 순수 함수)
|
|
imports: {
|
|
dirs: ['shared/utils'],
|
|
},
|
|
|
|
// 전역 CSS — 디자인 토큰/리셋/공통 유틸 클래스
|
|
css: ['~/assets/css/main.css'],
|
|
|
|
// 런타임 환경변수 — public 값만 클라이언트 번들에 포함됨
|
|
// SSG 빌드 시 process.env 값이 정적으로 주입됨 (Dockerfile ARG → ENV)
|
|
runtimeConfig: {
|
|
public: {
|
|
apiBaseUrl: process.env.NUXT_PUBLIC_API_BASE_URL || '/api',
|
|
// SEO 기준 사이트 URL (canonical/og:url/sitemap 생성용)
|
|
siteUrl: process.env.NUXT_PUBLIC_SITE_URL || 'https://innertab.co.kr',
|
|
},
|
|
},
|
|
|
|
// 전역 <head> 기본값 — 한국어 로케일 + 웹폰트(Pretendard / Bebas Neue / Noto Sans KR)
|
|
app: {
|
|
head: {
|
|
htmlAttrs: { lang: 'ko' },
|
|
title: '이너탭 (innertab)',
|
|
meta: [
|
|
{ charset: 'UTF-8' },
|
|
{ name: 'viewport', content: 'width=device-width, initial-scale=1.0' },
|
|
{ name: 'description', content: '이너탭(innertab) 채용 — 사람의 매일이 닿는 모든 곳에서 가장 앞선 답을 증명합니다.' },
|
|
// SEO 전역 기본값 (페이지별 값은 useSeo 컴포저블이 덮어씀)
|
|
{ name: 'theme-color', content: '#3556b0' },
|
|
{ name: 'format-detection', content: 'telephone=no' },
|
|
// 네이버 웹마스터 도구 사이트 소유 확인
|
|
{ name: 'naver-site-verification', content: '0aa189f30a54bf059188bc0b709c3529ad609a3d' },
|
|
{ property: 'og:site_name', content: '이너탭 innertab' },
|
|
{ property: 'og:type', content: 'website' },
|
|
{ property: 'og:locale', content: 'ko_KR' },
|
|
{ name: 'twitter:card', content: 'summary_large_image' },
|
|
],
|
|
link: [
|
|
// 파비콘 — 헤더 로고(ITAB) 기반
|
|
{ rel: 'icon', href: '/favicon.ico', sizes: 'any' },
|
|
{ rel: 'icon', type: 'image/png', sizes: '32x32', href: '/favicon-32x32.png' },
|
|
{ rel: 'icon', type: 'image/png', sizes: '16x16', href: '/favicon-16x16.png' },
|
|
{ rel: 'apple-touch-icon', sizes: '180x180', href: '/apple-touch-icon.png' },
|
|
{ rel: 'preconnect', href: 'https://fonts.googleapis.com' },
|
|
{ rel: 'preconnect', href: 'https://fonts.gstatic.com', crossorigin: '' },
|
|
{
|
|
rel: 'stylesheet',
|
|
href: 'https://fastly.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/static/pretendard.css',
|
|
},
|
|
{
|
|
rel: 'stylesheet',
|
|
href: 'https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Jua&family=Noto+Sans+KR:wght@400;500;700;900&display=swap',
|
|
},
|
|
],
|
|
},
|
|
},
|
|
|
|
// 개발 서버 설정 — 도커/윈도우 핫 리로딩 및 외부 도메인(ngrok) 허용
|
|
vite: {
|
|
server: {
|
|
allowedHosts: true,
|
|
watch: {
|
|
usePolling: true,
|
|
},
|
|
},
|
|
},
|
|
|
|
typescript: {
|
|
typeCheck: false, // CI/별도 명령(npm run typecheck)에서 vue-tsc 로 검사
|
|
strict: true,
|
|
},
|
|
})
|