Nuxt 3
Nuxt 3 เรนเดอร์หน้าเพจบนเซิร์ฟเวอร์โดยค่าเริ่มต้น สคริปต์ CDN และองค์ประกอบที่กำหนดเองต้องโหลดเฉพาะฝั่งไคลเอนต์เท่านั้น ปลั๊กอินฝั่งไคลเอนต์ของ Nuxt เป็นที่ที่สะอาดที่สุดในการทำเช่นนี้
@wink/elements npm package ติดตั้งและโหลด CDN bundle พร้อมกับ TypeScript types.
ติดตั้ง
หัวข้อที่มีชื่อว่า “ติดตั้ง”npm install @wink/elementsสร้างปลั๊กอินฝั่งไคลเอนต์
หัวข้อที่มีชื่อว่า “สร้างปลั๊กอินฝั่งไคลเอนต์”นามสกุล .client.ts บอก Nuxt ให้รันปลั๊กอินนี้เฉพาะในเบราว์เซอร์:
import { load } from '@wink/elements';
export default defineNuxtPlugin(() => { load({ clientId: useRuntimeConfig().public.winkClientId });});กำหนดค่าตัวแปร runtime
หัวข้อที่มีชื่อว่า “กำหนดค่าตัวแปร runtime”export default defineNuxtConfig({ runtimeConfig: { public: { winkClientId: process.env.NUXT_PUBLIC_WINK_CLIENT_ID, }, },});เพิ่มใน .env:
NUXT_PUBLIC_WINK_CLIENT_ID=your-client-idกำหนดค่า Vue สำหรับองค์ประกอบที่กำหนดเอง
หัวข้อที่มีชื่อว่า “กำหนดค่า Vue สำหรับองค์ประกอบที่กำหนดเอง”เพิ่มตัวเลือก isCustomElement ในคอมไพเลอร์เพื่อให้ Vue ไม่เตือนเกี่ยวกับแท็ก <wink-*> ที่ไม่รู้จัก:
export default defineNuxtConfig({ vue: { compilerOptions: { isCustomElement: (tag) => tag.startsWith('wink-'), }, }, runtimeConfig: { public: { winkClientId: process.env.NUXT_PUBLIC_WINK_CLIENT_ID, }, },});ใช้ในเทมเพลต
หัวข้อที่มีชื่อว่า “ใช้ในเทมเพลต”ห่อคอมโพเนนต์ Wink ด้วย <ClientOnly> เพื่อป้องกันความไม่ตรงกันของ SSR hydration:
<template> <main> <ClientOnly> <wink-content-loader layout="HOTEL" :id="layoutId" /> </ClientOnly> </main></template>
<script setup lang="ts">const layoutId = 'YOUR_LAYOUT_ID';</script>TypeScript types
หัวข้อที่มีชื่อว่า “TypeScript types”ขยาย HTMLElementTagNameMap ทั่วโลก (เหมือนกับ Vue 3) เพื่อให้ได้การเติมข้อความอัตโนมัติของแอตทริบิวต์ ดู หน้า integration Vue 3 สำหรับไฟล์ประกาศเต็มรูปแบบ