Перейти до вмісту

Nuxt 3

Nuxt 3 за замовчуванням рендерить сторінки на сервері. Скрипти CDN і кастомні елементи потрібно завантажувати лише на клієнті. Клієнтський плагін Nuxt — найчистіше місце для цього.

Terminal window
npm install @wink/elements

Створіть клієнтський плагін

Section titled “Створіть клієнтський плагін”

Суфікс .client.ts вказує Nuxt запускати цей плагін лише в браузері:

plugins/wink.client.ts
import { load } from '@wink/elements';
export default defineNuxtPlugin(() => {
load({ clientId: useRuntimeConfig().public.winkClientId });
});

Налаштуйте змінну часу виконання

Section titled “Налаштуйте змінну часу виконання”
nuxt.config.ts
export default defineNuxtConfig({
runtimeConfig: {
public: {
winkClientId: process.env.NUXT_PUBLIC_WINK_CLIENT_ID,
},
},
});

Додайте до .env:

NUXT_PUBLIC_WINK_CLIENT_ID=your-client-id

Налаштуйте Vue для кастомних елементів

Section titled “Налаштуйте Vue для кастомних елементів”

Додайте опцію компілятора isCustomElement, щоб Vue не показував попередження про невідомі теги <wink-*>:

nuxt.config.ts
export default defineNuxtConfig({
vue: {
compilerOptions: {
isCustomElement: (tag) => tag.startsWith('wink-'),
},
},
runtimeConfig: {
public: {
winkClientId: process.env.NUXT_PUBLIC_WINK_CLIENT_ID,
},
},
});

Використання в шаблонах

Section titled “Використання в шаблонах”

Обгорніть компоненти 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>

Розширте глобальний HTMLElementTagNameMap (так само, як у Vue 3), щоб отримати автозаповнення атрибутів. Повний файл декларації дивіться на сторінці інтеграції Vue 3.