Migration สู่ Tailwind v4: แปลง tailwind.config.js เป็น @theme แบบ CSS-First ในไม่กี่วินาที
Tailwind v3 to v4 Config Migrator ช่วยแปลง theme object จาก tailwind.config.js ให้เป็น @theme block แบบ CSS-first ของ Tailwind v4 ในเบราว์เซอร์ พร้อม flattened CSS variables, OKLCH hints และคำเตือนสำหรับ options ที่ถูกถอดออกใน v3
Table of Contents
Tailwind CSS v4 มาพร้อมกับการเปลี่ยนแปลงเชิงสถาปัตยกรรมครั้งใหญ่ที่สุดในประวัติศาสตร์ของเฟรมเวิร์กนี้ นั่นคือการย้าย configuration ออกจากไฟล์ JavaScript มาไว้ใน CSS โดยตรง theme object ที่คุ้นเคยใน tailwind.config.js กลายเป็น @theme block แบบ CSS-first ที่สร้างจาก CSS custom properties แท้ ๆ ซึ่งดีต่อทั้ง performance และความยืดหยุ่น แต่ก็แปลว่าทุกโปรเจกต์เดิมต่างมี migration รออยู่ เครื่องมือฟรีอย่าง Tailwind v3 to v4 Config Migrator ช่วยขจัดงานน่าเบื่อเหล่านี้ เพียงวาง theme object ของคุณลงไป เครื่องมือจะสร้าง @theme block ที่พร้อมใช้งาน ครบทั้ง flattened color และ font variables, OKLCH hints อัตโนมัติ และคำเตือนสำหรับ options ที่มีเฉพาะใน v3 แล้วไม่มีแล้วใน v4
ข่าวดีคือ migration ส่วนใหญ่เป็นงานเชิงกลไกล จึงเหมาะกับการทำอัตโนมัติมาก color scale แบบซ้อนกันอย่าง colors.brand.500 จะกลายเป็น --color-brand-500 ส่วน font stack ใต้ fontFamily จะกลายเป็น --font-sans และชื่ออื่น ๆ ในรูปแบบเดียวกัน การทำมือทั้งหมดนี้ใน theme ขนาดใหญ่ช้าและผิดพลาดง่าย เครื่องมือจัดการเรื่องการ flatten, การตั้งชื่อ และ syntax ให้เสร็จในไม่กี่วินาที
ทุกอย่างทำงานในเบราว์เซอร์ของคุณล้วน ๆ config ไม่เคยถูกส่งออกจากเครื่อง ไม่ต้องสมัครสมาชิก และรันเครื่องมือซ้ำได้เท่าที่ต้องการระหว่างที่ค่อย ๆ ย้ายระบบ
ทำไมต้องใช้ Tailwind v3 to v4 Config Migrator?
- ประหยัดเวลาเปลี่ยนชื่อหลายชั่วโมง theme ที่มีหลาย color scale และหลาย font family อาจมีรายการหลายร้อยรายการ เครื่องมือแปลงทั้งหมดเป็น CSS variables ที่ตั้งชื่อตาม namespace ถูกต้องในครั้งเดียว
- ได้ชื่อตามมาตรฐาน v4 ตั้งแต่ครั้งแรก v4 คาดหวัง namespace แบบ --color-* และ --font-* ถ้าพิมพ์ชื่อ variable ผิดแม้ตัวเดียว utilities จะหายเงียบ ๆ การให้เครื่องมือสร้างชื่อให้จึงตัดบั๊กกลุ่มใหญ่ออกไปได้เลย
- เข้าใจการเปลี่ยนไปใช้ OKLCH palette เริ่มต้นของ Tailwind v4 ใช้ OKLCH color space เครื่องมือแนบ OKLCH hints ให้กับสีที่แปลงแล้ว ทำให้คุณอัปเดต palette ได้อย่างมีแผนแทนการเดา
- จับ options ที่มีแค่ใน v3 ก่อน build พัง options อย่าง safelist หรือ corePlugins ไม่มี equivalent ตรง ๆ ใน v4 เครื่องมือจะเตือนคุณเพื่อไม่ให้อะไรหลุดรอดไปเงียบ ๆ
- ไม่ต้องติดตั้งอะไรเลย ไม่ต้อง npm install, ไม่มี CLI flags, ไม่ต้องสมัครบัญชี เปิดหน้าเว็บ วางโค้ด แล้วคัดลอกผลลัพธ์
- ได้เรียนรู้ไปพร้อมกับการแปลง เพราะผลลัพธ์เป็นไปตาม convention ของ Tailwind เอง เครื่องมือนี้จึงเปรียบเสมือนตัวอย่างสด ๆ ว่า theme ของ v4 ควรเขียนอย่างไร
ฟีเจอร์หลัก
| ฟีเจอร์ | ทำอะไร |
|---|---|
| Theme object input | วาง theme object จาก tailwind.config.js ลงใน editor ได้โดยตรง |
| @theme block generator | สร้าง @theme block แบบ CSS-first ของ v4 ที่ครบถ้วน พร้อมนำไปวางใน stylesheet ได้เลย |
| Flattened variables | แปลง key ที่ซ้อนกันเป็นชื่อแบบ --color-brand-500 ครอบคลุมสี ฟอนต์ และ namespace อื่น ๆ |
| OKLCH hints | แนะนำค่า OKLCH โดยประมาณสำหรับสีที่แปลงแล้ว ควบคู่กับค่าเดิม |
| คำเตือน options ที่ถูกถอดออก | ระบุ options ที่มีเฉพาะใน v3 ซึ่งไม่มี equivalent ใน v4 |
| ทำงานในเบราว์เซอร์ล้วน | การแปลงทั้งหมดเกิดขึ้นในเครื่องคุณ ไม่มีการอัปโหลดใด ๆ |
รายละเอียดที่ควรรู้เพิ่มเติม:
- การ flatten เป็นไปตาม convention ทางการของ Tailwind ดังนั้น colors.primary.500 ไม่ว่าจะซ้อนชั้นไหนก็จบที่ variable เดียวกันคือ --color-primary-500
- OKLCH hints เป็นเชิงแนะนำ ค่า hex หรือ RGB เดิมของคุณยังใช้ได้ปกติใน v4 คุณจึงเลือกย้ายไป color space ใหม่แบบค่อยเป็นค่อยไปได้
- คำเตือนทุกข้อมีทางแก้ชัดเจน บอกได้ว่าตรงไหนของผลลัพธ์ต้องตัดสินใจเองก่อน cutover
วิธีใช้งาน Tailwind v3 to v4 Config Migrator
- คัดลอก theme object ของคุณ เปิด tailwind.config.js แล้วคัดลอกเนื้อหาใน theme (และ theme.extend ถ้ามีใช้) ไม่ต้องเอาส่วนอื่นของไฟล์มาด้วย เพราะ plugins และ content globs อยู่นอกขอบเขตของเครื่องมือนี้
- วางลงในเครื่องมือ นำ object ไปวางใน input panel ของ หน้า migrator แล้วให้เครื่องมือสร้าง @theme block ให้
- ตรวจ OKLCH hints สีที่แปลงแล้วแต่ละตัวจะมีค่า OKLCH ที่แนะนำแสดงอยู่ เลือกได้ว่าจะเก็บค่าเดิมหรือใช้ค่าที่แนะนำ ซึ่งแบบไหนก็ใช้ได้ใน v4
- แก้คำเตือนต่าง ๆ อ่านคำเตือนเกี่ยวกับ options ที่มีเฉพาะใน v3 แล้วแก้ตามวิธีแนะนำก่อนตัดสินใจเปลี่ยนระบบจริง
- วางลงใน global CSS คัดลอก @theme block ที่เสร็จแล้วไปวางใน stylesheet หลัก (มักเป็น globals.css หรือ app.css บรรทัดถัดจาก @import "tailwindcss";) แล้วลบส่วนที่เกี่ยวข้องออกจาก config เดิม
อะไรที่เปลี่ยนไปใน v4 CSS-First Configuration
จาก JavaScript สู่ CSS ใน v3 design tokens อยู่ใน tailwind.config.js แล้ว Tailwind คอมไพล์เป็น utilities ให้ แต่ใน v4 บรรทัดเดียว @import "tailwindcss"; แทนที่ directive ทั้งสามตัว @tailwind และ @theme block คือที่อยู่ของ tokens ไฟล์ config กลายเป็นสิ่งที่ไม่จำเป็น อะไรที่เขียนใน @theme ได้ก็ไม่ต้องใช้ JavaScript อีกต่อไป
การตั้งชื่อ variable แบบ flatten v3 อนุญาตให้ซ้อนลึกได้อย่าง colors.brand.500 พร้อมชั้น extend แต่ v4 flatten ทุกอย่างเป็น CSS custom properties ที่มี namespace: สีใช้ --color-*, font family ใช้ --font-*, ขนาดฟอนต์ใช้ --text-* และอื่น ๆ ไม่มี extend แล้ว คุณแค่เขียน variable เพิ่มเท่านั้น และเพราะสิ่งเหล่านี้เป็น CSS variables จริง คุณจึงอ่านหรือ override มันได้ทุกที่ในสไตล์ของคุณเอง ไม่ใช่แค่ใน Tailwind classes
ทำไม OKLCH ถึงสำคัญ palette เริ่มต้นของ v4 เขียนด้วย OKLCH ซึ่งเป็น color space ที่สอดคล้องกับการรับรู้ของสายตา การไต่ค่าตัวเลขเท่า ๆ กันให้ความสว่างที่รู้สึกเท่า ๆ กัน gradient เบลนด์เนียนขึ้น และจอ wide-gamut สามารถแสดงสีจัดจ้านขึ้นได้ OKLCH hints ของเครื่องมือเป็นจุดเริ่มต้นที่ดีถ้าคุณอยากให้ palette ที่ทำเองได้ประโยชน์แบบเดียวกัน โดยที่ค่า hex และ RGB ธรรมดาก็ยังใช้ได้สบาย
Options ที่หายไป บาง key ใน config ของ v3 ไม่มี equivalent ใน v4: safelist ถูกแทนด้วย @source inline(...), corePlugins ถูกถอดออกเพราะ v4 ไม่มีการเปิดปิด plugin แบบนั้น, option separator ถูกลบไปทั้งหมด และ darkMode: 'class' กลายเป็นการประกาศ @custom-variant dark ใน CSS เครื่องมือจะเตือนคุณเรื่องเหล่านี้ แทนที่จะปล่อยหล่นหายเงียบ ๆ
กรณีการใช้งานจริง
อัปเกรดแอปที่มีอยู่สู่ Tailwind v4
ถ้าคุณดูแล production app ที่ยังใช้ Tailwind v3 ให้เริ่มจากการนำ theme object มาผ่าน migrator คุณจะได้ @theme block ครบชุดพร้อมเช็กลิสต์ของ options ที่ถูกถอดออก ทำให้การ cutover กลายเป็น diff ที่รีวิวได้ แทนการเดามั่วทั้งบ่าย
ตรวจสอบ theme object ขนาดใหญ่
ทีมต่าง ๆ มักสะสมการปรับสีมาหลายปี เทาที่ใกล้กันจนแยกไม่ออก น้ำเงินสีเดียวที่ใช้ครั้งเดียว หรือ font stack ที่ไม่มีใครจำที่มา การแปลงทั้ง object ทำให้เห็นทุก token ในรายการเดียวแบบแบน ๆ จับรายการซ้ำและรายการไร้ผลได้ง่ายขึ้นก่อนที่มันจะกลายเป็น CSS variables
เรียนรู้แนวคิดของ v4
ถ้าคุณเพิ่งเริ่มกับ v4 การสร้างผลลัพธ์จาก config ที่คุณเข้าใจอยู่แล้วเป็นวิธีซึมซับ naming ใหม่ที่เร็วที่สุดวิธีหนึ่ง การเห็น colors.surface.raised กลายเป็น --color-surface-raised สอน pattern ได้ดีกว่าตารางตัวอย่างเฉย ๆ เสมอ
ทำให้ design tokens ตรงกันทุกที่
บางทีมเก็บ tokens ไว้ใน design system repo แล้วสะท้อนเข้ามาใน Tailwind การรัน migrator ใหม่ทุกครั้งที่แหล่งความจริงเปลี่ยน ช่วยให้ @theme block ของ v4 ตรงกับ design tokens ด้วยความพยายามน้อยที่สุด
แนวปฏิบัติที่แนะนำ
- ย้ายแบบค่อยเป็นค่อยไป แปลงทีละ namespace สีก่อน แล้วค่อยฟอนต์ แทนการเขียนใหม่ทุกอย่างใน commit เดียว
- เก็บ config ของ v3 ไว้จนกว่าจะ cutover ปล่อย tailwind.config.js ไว้ระหว่างที่ classes เดิมยังทำงานอยู่ แล้วลบเมื่อ @theme block ผ่านการทดสอบแล้วเท่านั้น
- รัน codemods ทางการควบคู่กันไป เครื่องมือ upgrade ของ Tailwind เองจัดการเรื่องเปลี่ยนชื่อ classes และแก้ templates ส่วน migrator นี้ดูแลฝั่ง theme ทั้งสองเสริมกันอย่างดี
- ทดสอบด้วยสายตาเทียบกับ screenshot เทียบหน้าสำคัญ ๆ ก่อนและหลัง ความต่างของ color space ละเอียดมากและจับได้ง่ายที่สุดเมื่อวางเทียบกัน
- ใช้ OKLCH แบบเลือกที่ เก็บสีแบรนด์สำคัญไว้ที่ค่าเดิมจนกว่าจะเช็กบนจอจริงแล้ว ค่อยเปลี่ยน tokens รองก่อนเป็นอย่างแรก
- ถือว่าผลลัพธ์เป็น source code commit @theme block ที่สร้างได้และรีวิวมันเหมือนการเปลี่ยนแปลงอื่น ๆ ไม่ใช่ของใช้แล้วทิ้ง
พร้อมเริ่มหรือยัง? เปิด Tailwind v3 to v4 Config Migrator วาง theme object ของคุณ แล้วรับ @theme block ที่สะอาดเรียบร้อยภายในไม่ถึงนาที
เครื่องมืออื่น ๆ ที่น่าสนใจ:
- Color Converter — แปลงสีระหว่าง HEX, RGB, HSL และ OKLCH
- CSS Formatter — จัดรูปแบบ CSS ที่สร้างได้ให้เรียบร้อยก่อน commit
- Box Shadow Generator — ออกแบบเงาแบบเห็นภาพแล้วส่งออกเป็น CSS
ขอให้ migration ราบรื่นนะครับ!
คำถามที่พบบ่อย
ถ: เครื่องมือส่ง tailwind.config.js ของผมขึ้นเซิร์ฟเวอร์หรือเปล่า? ตอบ: ไม่ครับ การแปลงทั้งหมดทำงานในเบราว์เซอร์ของคุณ config จึงไม่เคยออกจากเครื่อง
ถ: แปลงทั้งไฟล์ config ได้ไหม รวม plugins และ content paths? ตอบ: เครื่องมือเน้นที่ theme object ซึ่งเป็นส่วนที่ migration แบบ CSS-first มีผลจริง ส่วน plugins, content globs และ option ระดับไฟล์อื่น ๆ ให้จัดการด้วยเครื่องมือ upgrade ทางการของ Tailwind แยกต่างหาก
ถ: OKLCH hints คืออะไรกันแน่? ตอบ: สีที่แปลงแล้วแต่ละตัว เครื่องมือจะแนะนำค่า OKLCH โดยประมาณเพิ่มเติมด้วย มันเป็นข้อเสนอแนะ ไม่ใช่การแทนที่ ค่าเดิมยังใช้ได้ใน v4 และคุณเป็นคนตัดสินใจว่าจะย้ายไป OKLCH หรือไม่
ถ: ต้องลบ config ของ v3 ทันทีไหม? ตอบ: ไม่จำเป็นครับ เก็บ config เดิมไว้ระหว่างที่ย้ายระบบแบบค่อยเป็นค่อยไป แล้วลบเมื่อ @theme block ครบถ้วนและผ่านการทดสอบในแอปจริงแล้ว