ทำไมถึงต้องใช้ Nuxt ทั้งๆที่มี Vue อยู่แล้ว ?
/ 4 min read
สามารถดู video ของหัวข้อนี้ก่อนได้ ดู video
(บทความยังไม่เสร็จดี กำลังอยู่ในระหว่างการเรียบเรียงใหม่ สามารถฟังฉบับเนื้อหาได้ก่อนผ่านคลิปนะครับ 🙏)
Nuxt คืออะไร ?
Web: https://nuxt.com/
Nuxt คือ open source ที่สร้างขึ้นสำหรับ full stack web app โดยเฉพาะ ที่ห่อหุ่มอยู่บน Vue.js อีกที
Nuxt มีไอเดียว่า เราจะทำการเตรียมของที่จำเป็นที่ต้องการในการสร้างเว็บด้วย Vue.js framework เอาไว้ และเพ่ิมความสามารถในการทำ server side render เป็น default เพื่อให้ครอบคลุมทุก use case ของการ production ไว้ด้วย
แตกต่างกับ Vue ยังไงบ้าง ?
State ที่ Nuxt เพิ่มเติมมาจาก Vue
-
Server-side rendering (หรือ SSR) = สามารถทำ SSR ได้และสามารถทำ Hybrid mode ในแต่ละหน้าได้ https://nuxt.com/docs/guide/concepts/rendering
-
SEO and Meta = ด้วยความสามารถ SSR ทำให้สามารถกำหนด meta tag สำหรับ share social จากการ render server ได้
-
Auto import = ไม่ต้องคอย import คำสั่งนับล้านเข้า เช่น Vue
เทียบกับ Nuxt
-
Data-fetching utilities = มีคำสั่ง
useFetch
ในการ call API (โดยไม่ต้อง import คำสั่งมาใหม่) -
Code splitting = แยกส่วนทำให้ build file แต่ละ file ขนาดเล็กลง
ในเมื่อ Nuxt ทำเว็บได้เหมือน Vue เลย ใช้ Vue หรือ Nuxt อะไรจะง่ายกว่า ?
- มันมี feature ที่เหมือนกับ vue เลย (เพราะมันห่อหุ้ม Vue เอาไว้)
- ความแข็งแกร่งของ Nuxt = เหมือน vue แต่เตรียม feature ไว้ให้พร้อมแล้ว
- Routing ก็มี
- Fetch ก็มี (แถม async, await ไม่ต้องประกาศ function ก่อนด้วย)
- state management ก็มี (ซึ่งจริงๆจะใช้ Pinia ก็ได้)
มันเหมาะสำหรับใครก็ตามที่
- ขี้เกียจวาง structure เอง (มีคนเตรียม pattern เอาไว้ให้แล้ว)
- ต้องการความสามารถ server side render
= คุณเหมาะกับ Nuxt มากกว่า
แต่ถ้าใครซีเรียสเรื่อง
- การวาง Strucuture เป็นแบบฉบับตัวเอง
- ต้องการเอาเว็บ deploy แค่ฝั่ง Client site (เพื่อให้สามารถขึ้นเว็บง่ายๆ อย่าง github page, firebase hosting)
= คุณเหมาะกับ Vue มากกว่า
มาลองทำ Nuxt กัน
เราจะทำเป็น static site 2 หน้าคือหน้ารวม Todo และหน้าแสดง Todo แบบง่าย ๆ
- ใช้รูปแบบ project เหมือน Vue todo (ที่เคยยิงเข้า Mock API มา)
เราใช้คำสั่ง nuxt ในการ render web ออกมาเลย
หลังจากนั้นสร้าง structure มาประมาณนี้
- เราจะทำการสร้างไฟล์ขึ้นมาที่ folder
todos
แรกสุดเราจะเปลี่ยน app.vue
เรียก NuxtPage เพื่อใช้ Router ของ Nuxt แทน
ตัวอย่าง pages/todos/index.vue
- เพิ่มสำหรับการ list todo ออกมา
- ทำการเพิ่ม Router และการ edit ออกมา
ตัวอย่าง pages/todos/[id].vue
การ deploy Nuxt
ด้วยความที่ Nuxt พื้นฐานเป็น SSR = ต้องการ backend server ในการ render website
- Nuxt run อยู่บน Node.js https://nuxt.com/docs/getting-started/deployment
- เช่น ถ้าจะ deploy Firebase hosting มันจะ require Firebase Cloud function (Node) ด้วยสำหรับการทำ SSR เพิ่มเข้ามา
มองในแง่การ deploy = Nuxt จะเปลือง resource มากกว่า เพราะต้องใช้การ render server ร่วมกันด้วย (ใช้มาก ใช้น้อย ขึ้นอยู่กับวิธี optimize เว็บ)
ตัวอย่าง deploy ลง Vercel
เราจะมาลอง deploy Nuxt ที่เราทำกันลง Vercel เลย https://vercel.com/
- ต้อง push งานขึ้น git เพื่อทำการ deploy
- เสร็จแล้วเลือก menu ผ่าน Vercel = deploy ได้เลย
ตอบคำถามอื่นๆจากทางบ้าน
(เดี๋ยวมีเพิ่มในบทความมา เบื้องต้นทุกคนสามารถฟังผ่านคลิปก่อนได้)
- รู้จักกับ Web Vitals guideline การสร้าง UX ที่ดีออกมากันมี Video
รู้จักกับคำศัพท์พื้นฐานของ Web Vitals และ use case ต่างๆของ Web Vitals กัน
- มาแก้ปัญหา Firestore กับปัญหาราคา Read pricing สุดจี๊ดมี Video มี Github
ในฐานะที่เป็นผู้ใช้ Firebase เหมือนกัน เรามาลองชวนคุยกันดีกว่า ว่าเราจะสามารถหาวิธีลด Pricing หรือจำนวนการ read ของ Firestore ได้ยังไงกันบ้าง
- มารู้จักการเขียน code แบบ clean code กัน (ฉบับ Javascript)มี Video
มาแชร์เทคนิคการเขียน code แบบ clean ฉบับ Javascriptกัน ว่ามีกี่วิธีที่สามารถทำให้ code สะอาดขึ้นได้บ้าง
- รู้จักกับ Auth0มี Video
มารู้จักกับ Auth0 Authentication platform ที่ช่วยทำให้พัฒนา application พร้อมระบบยืนยันตัวตนได้ง่ายขึ้น