react-thaizip

การตั้งค่า

รูปแบบ thaizip.config.json v2 และกฎการตรวจหา directory, package manager และ Tailwind

npx react-thaizip init สร้าง thaizip.config.json ที่รากโปรเจกต์ คำสั่ง add อ่านไฟล์นี้เพื่อหาตำแหน่งเขียนคอมโพเนนต์และไฟล์ช่วยเหลือ

รูปแบบ v2

ตัวอย่างนี้แสดงทุกฟิลด์ของ config v2 ค่าจริงขึ้นอยู่กับโปรเจกต์และเวอร์ชัน CLI ที่ใช้สร้างไฟล์

{
  "typescript": true,
  "componentDir": "app/components",
  "libDir": "lib",
  "hooksDir": "hooks",
  "packageManager": "npm",
  "tailwind": {
    "version": 4,
    "css": "app/globals.css"
  },
  "registryVersion": "0.2.1"
}
ฟิลด์ค่าที่ใช้ได้ความหมาย
typescripttrue หรือ falseตรวจพบอัตโนมัติตอน init จากการมีไฟล์ tsconfig.json (ไม่มีการถามผู้ใช้) กำหนดว่า add จะเขียนไฟล์เป็น .tsx/.ts ตามต้นฉบับ (true) หรือตัด syntax ของ TypeScript ออกแล้วเขียนเป็น .jsx/.js แทน (false)
componentDirstring ที่ไม่ว่างตำแหน่งเขียนไฟล์คอมโพเนนต์ เทียบจากรากโปรเจกต์
libDirstring ที่ไม่ว่างตำแหน่งเขียน utils.ts; ค่าเริ่มต้นจาก init คือ lib
hooksDirstring ที่ไม่ว่างตำแหน่งเขียน use-thai-address-index.ts; ค่าเริ่มต้นคือ hooks
packageManagernpm, yarn, pnpm, bunpackage manager ที่ add ใช้ติดตั้ง dependencies
tailwind.version3 หรือ 4major version ของ Tailwind ที่ตรวจพบ
tailwind.cssstringpath ของ global CSS เทียบจากรากโปรเจกต์ หรือ "" เมื่อหาไฟล์ไม่พบ
registryVersionstring ที่ไม่ว่างเวอร์ชัน CLI ที่บันทึกตอนเขียนไฟล์ครั้งล่าสุด; เป็น metadata ของ registry ไม่ใช่เวอร์ชัน thaizip

Path ทุกค่าถูกตีความจาก working directory ที่เรียก CLI จึงควรรัน init และ add ที่รากโปรเจกต์เดียวกับไฟล์ config

registryVersion ไม่ใช่แค่ metadata เฉย ๆ: add ใช้ค่านี้ตรวจความเก่าของไฟล์ lib/hook ที่ถูกป้องกันไว้ ถ้า add ข้ามไฟล์เหล่านั้นเพราะมีอยู่แล้ว (protected) และ registryVersion ที่บันทึกไว้เก่ากว่าเวอร์ชันของ CLI ที่กำลังรัน จะพิมพ์คำเตือนว่าไฟล์นั้นอาจล้าสมัย พร้อมคำสั่งสำหรับ refresh เช่น npx react-thaizip add utils --overwrite ทุกครั้งที่ add เขียนไฟล์จริงอย่างน้อยหนึ่งไฟล์ (ไม่ว่าจะเป็น component, lib หรือ hook) registryVersion ใน thaizip.config.json จะถูกอัปเดตเป็นเวอร์ชันของ CLI ที่รันอยู่โดยอัตโนมัติ

การตรวจหาโครงสร้างโปรเจกต์

init เลือก componentDir เริ่มต้นตามลำดับนี้ โดยตรวจจากรากโปรเจกต์:

เงื่อนไขComponent directory
มี app/app/components/
ไม่มี app/ แต่มี pages/components/
ไม่มีทั้งสองอย่างsrc/components/

ถ้ามีทั้ง app/ และ pages/ จะเลือก app/components/ เมื่อไม่ใช้ --yes คุณแก้ตำแหน่งที่ prompt ได้ก่อนเขียน config

การตรวจหา package manager

CLI ใช้ lockfile แรกที่พบตามลำดับนี้:

  1. bun.lock หรือ bun.lockbbun
  2. pnpm-lock.yamlpnpm
  3. yarn.lockyarn
  4. package-lock.jsonnpm
  5. ถ้าไม่มี lockfile เหล่านี้ → npm

การตรวจหา Tailwind

Tailwind เป็นสิ่งที่ต้องติดตั้งก่อน init CLI ไม่ได้ติดตั้ง Tailwind ให้ กฎการตรวจหาทำงานตามลำดับ:

  1. หา @import "tailwindcss" หรือรูปแบบ single quote ใน global CSS ที่รู้จัก ถ้าพบให้เป็น Tailwind v4 พร้อม path ของไฟล์นั้น
  2. ถ้า dependency tailwindcss ระบุ major version 4 ขึ้นไป ให้เป็น v4 และเก็บ tailwind.css เป็น "" เมื่อยังหา stylesheet ไม่พบ
  3. หา tailwind.config.ts, .js, .cjs หรือ .mjs ถ้าพบให้เป็น v3 และหา global CSS ที่มี @tailwind
  4. ถ้า dependency ระบุ major version 3 ให้เป็น v3 และเก็บ CSS path เป็น "" เมื่อหาไม่พบ
  5. ถ้าไม่มีเงื่อนไขใดตรง init จะหยุดและแนะนำให้ติดตั้ง Tailwind

Global CSS ที่ค้นหาตามลำดับคือ app/globals.css, src/app/globals.css, styles/globals.css, src/styles/globals.css, src/index.css, src/App.css และ app/global.css

การเขียนไฟล์และ import paths

Template คอมโพเนนต์ถูกเขียนต้นฉบับด้วย imports @/lib/* และ @/hooks/* เพื่อ typecheck ใน registry แต่ทุกครั้งที่ add คัดลอกไฟล์คอมโพเนนต์ รวมถึงการเขียนทับ จะเขียน specifiers เหล่านั้นเป็น relative paths จาก componentDir ไปยัง libDir และ hooksDir ที่กำหนดใน config โดยไม่ใส่นามสกุลไฟล์

ตัวอย่าง เมื่อ componentDir เป็น app/components, libDir เป็น lib และ hooksDir เป็น hooks imports จะชี้ออกจาก app/components ไปยัง directory สองแห่งนั้น ไม่จำเป็นต้องตั้ง alias @ ในโปรเจกต์ปลายทาง

ไฟล์ lib และ hook ที่มีอยู่ได้รับการป้องกันตามค่าเริ่มต้นเสมอ แม้ส่ง --yes และจะถูกเขียนทับเฉพาะเมื่อส่ง --overwrite อย่างชัดเจนเท่านั้น ส่วนไฟล์คอมโพเนนต์ที่มีอยู่จะถูกข้ามตามค่าเริ่มต้นและจะเขียนทับเฉพาะเมื่อยืนยันหรือส่ง --overwrite การ rewrite imports จึงเกิดเฉพาะเมื่อคัดลอกคอมโพเนนต์จริง

Config รุ่นเก่า

เมื่อ add อ่าน config v1 ที่รองรับได้ จะย้ายไฟล์เป็น v2 ในตำแหน่งเดิม โดยเติม libDir, hooksDir และ Tailwind metadata ที่ตรวจพบ หากตรวจ Tailwind ไม่ได้ migration จะใช้ version 4 และ CSS path ว่าง config v1 ที่มี typescript: false ก็ถูกย้ายได้ตามปกติเช่นกัน (ค่า typescript จะถูกเก็บไว้ตามที่มีอยู่ หรือใช้ true เป็นค่าเริ่มต้นถ้าไม่มีฟิลด์นี้) มีเพียง config ที่มีรูปแบบไม่ถูกต้องเท่านั้นที่จะไม่ถูกย้าย ให้รัน npx react-thaizip init ใหม่เพื่อสร้างไฟล์ที่ถูกต้อง

หาก path หรือ metadata ไม่ตรงกับโปรเจกต์ ดูขั้นตอนกู้คืนที่ การแก้ปัญหา

On this page