Nuxt 3
Nuxt 3는 기본적으로 서버에서 페이지를 렌더링합니다. CDN 스크립트와 커스텀 엘리먼트는 클라이언트 사이드에서만 로드되어야 합니다. Nuxt 클라이언트 플러그인이 이를 처리하기에 가장 깔끔한 방법입니다.
@wink/elements npm 패키지 TypeScript 타입과 함께 CDN 번들을 설치하고 로드하세요.
npm install @wink/elements클라이언트 플러그인 생성
섹션 제목: “클라이언트 플러그인 생성”.client.ts 접미사는 Nuxt에 이 플러그인을 브라우저에서만 실행하도록 지시합니다:
import { load } from '@wink/elements';
export default defineNuxtPlugin(() => { load({ clientId: useRuntimeConfig().public.winkClientId });});런타임 변수 구성
섹션 제목: “런타임 변수 구성”export default defineNuxtConfig({ runtimeConfig: { public: { winkClientId: process.env.NUXT_PUBLIC_WINK_CLIENT_ID, }, },});.env에 추가:
NUXT_PUBLIC_WINK_CLIENT_ID=your-client-id커스텀 엘리먼트를 위한 Vue 구성
섹션 제목: “커스텀 엘리먼트를 위한 Vue 구성”Vue가 알 수 없는 <wink-*> 태그에 대해 경고하지 않도록 isCustomElement 컴파일러 옵션을 추가하세요:
export default defineNuxtConfig({ vue: { compilerOptions: { isCustomElement: (tag) => tag.startsWith('wink-'), }, }, runtimeConfig: { public: { winkClientId: process.env.NUXT_PUBLIC_WINK_CLIENT_ID, }, },});템플릿에서 사용하기
섹션 제목: “템플릿에서 사용하기”Wink 컴포넌트를 <ClientOnly>로 감싸 SSR 하이드레이션 불일치를 방지하세요:
<template> <main> <ClientOnly> <wink-content-loader layout="HOTEL" :id="layoutId" /> </ClientOnly> </main></template>
<script setup lang="ts">const layoutId = 'YOUR_LAYOUT_ID';</script>TypeScript 타입
섹션 제목: “TypeScript 타입”전역 HTMLElementTagNameMap을 확장하여(이는 Vue 3과 동일) 속성 자동완성을 지원합니다. 전체 선언 파일은 Vue 3 통합 페이지를 참조하세요.