Pular para o conteúdo

Nuxt 3

Nuxt 3 renderiza páginas no servidor por padrão. Scripts CDN e elementos personalizados devem ser carregados apenas no lado do cliente. Um plugin cliente Nuxt é o local mais limpo para fazer isso.

Terminal window
npm install @wink/elements

O sufixo .client.ts indica ao Nuxt para executar este plugin apenas no navegador:

plugins/wink.client.ts
import { load } from '@wink/elements';
export default defineNuxtPlugin(() => {
load({ clientId: useRuntimeConfig().public.winkClientId });
});
nuxt.config.ts
export default defineNuxtConfig({
runtimeConfig: {
public: {
winkClientId: process.env.NUXT_PUBLIC_WINK_CLIENT_ID,
},
},
});

Adicione ao .env:

NUXT_PUBLIC_WINK_CLIENT_ID=seu-client-id

Adicione a opção do compilador isCustomElement para que o Vue não exiba avisos sobre tags desconhecidas <wink-*>:

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

Envolva os componentes Wink em <ClientOnly> para evitar incompatibilidades de hidratação SSR:

<template>
<main>
<ClientOnly>
<wink-content-loader layout="HOTEL" :id="layoutId" />
</ClientOnly>
</main>
</template>
<script setup lang="ts">
const layoutId = 'YOUR_LAYOUT_ID';
</script>

Estenda o HTMLElementTagNameMap global (igual ao Vue 3) para obter autocompletar de atributos. Veja a página de integração Vue 3 para o arquivo de declaração completo.