Aller au contenu

Nuxt 3

Nuxt 3 génère les pages côté serveur par défaut. Les scripts CDN et les éléments personnalisés doivent être chargés uniquement côté client. Un plugin client Nuxt est l’endroit le plus propre pour le faire.

Fenêtre de terminal
npm install @wink/elements

Le suffixe .client.ts indique à Nuxt d’exécuter ce plugin uniquement dans le navigateur :

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,
},
},
});

Ajoutez dans .env :

NUXT_PUBLIC_WINK_CLIENT_ID=your-client-id

Ajoutez l’option isCustomElement au compilateur pour que Vue ne génère pas d’avertissement sur les balises inconnues <wink-*> :

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

Encapsulez les composants Wink dans <ClientOnly> pour éviter les erreurs d’hydratation SSR :

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

Étendez le HTMLElementTagNameMap global (comme dans Vue 3) pour bénéficier de l’autocomplétion des attributs. Consultez la page d’intégration Vue 3 pour le fichier de déclaration complet.