- เครื่องมือ CLI สำหรับ build TypeScript library เป็น ESM/CJS ได้อย่างง่ายดายโดยไม่ใช้ bundler
- เริ่มต้นจาก Zod ในฐานะเครื่องมือ build ภายใน และปัจจุบันเปิดให้ใช้เป็นเครื่องมือแบบกว้างสำหรับไลบรารี TypeScript ทุกประเภท
- ใช้ tsc (TypeScript compiler) เพื่อรองรับการ rewrite ส่วนขยายไฟล์, build โมดูลคู่, การสร้าง exports อัตโนมัติ เป็นต้น ทำให้มีการ build ระดับ production ได้แม้ไม่ใช้ bundler
- เหมาะสำหรับการปล่อยใช้งานเร็วและการทำ CI/CD อัตโนมัติ และ แนะนำอย่างยิ่งเมื่อจำเป็นต้องสร้างแพ็กเกจแบบไลบรารี (การจัดจำหน่าย ESM/CJS พร้อมกัน)
- การทำงานอัตโนมัติของ การประกาศ type/exports/bin ช่วยป้องกันความผิดพลาดด้านบำรุงรักษา/การปล่อยใช้งาน
คุณสมบัติและฟีเจอร์หลัก
- การ build โมดูลคู่: สร้างไฟล์ ESM(.js) และ CJS(.cjs) พร้อมกันในครั้งเดียว
- ไม่ต้องมี bundler/การตั้งค่าแยก: ทำงานได้โดยไม่ต้องใช้ webpack, esbuild, rollup และต้องมีเพียง
package.json และ tsconfig.json เท่านั้น
- การจัดการ entrypoint แบบประกาศเชิงโครงสร้าง: กำหนด entrypoint, subpath, wildcard โดยตรงใน
package.json#/zshy
- การสร้าง exports อัตโนมัติ: หลัง build จะอัปเดตฟิลด์
"exports" ของ package.json โดยอัตโนมัติ
- เสรีในโครงสร้างไฟล์: ไม่บังคับโครงสร้าง src/out และสามารถใช้ import extension ได้อย่างอิสระ
- การจัดการ assets: คัดลอกไฟล์ที่ไม่ใช่ JS โดยอัตโนมัติ
- รองรับ .tsx: แปลงเป็น .js/.cjs/.mjs ตามที่กำหนดใน tsconfig
- รองรับ CLI: เมื่อกำหนด entrypoint ของ bin แล้ว
package.json#/bin จะถูกสร้างให้อัตโนมัติ
- อาจช้ากว่า: เน้นการทำ type-check และการแปลงด้วย tsc มากกว่า ความเร็ว build โดยให้ความสำคัญกับความน่าเชื่อถือ/ความถูกต้อง
หลักการทำงานและจุดเด่นที่แตกต่าง
- TypeScript Compiler API ใช้ rewrite ส่วนขยาย (.js/.cjs/.mjs) และเส้นทาง import โดยอัตโนมัติ
- สร้างไฟล์ ESM/CJS และการประกาศ type (.d.ts/.d.cts) พร้อมกันสำหรับแต่ละ entrypoint
- รองรับ entrypoint bin สำหรับ CLI: zshy จะเขียนเส้นทางลงใน package.json#/bin โดยอัตโนมัติ และรองรับ shebang เมื่อจำเป็น
- โครงสร้างไฟล์เสรี กำหนดได้แค่ outDir ของ tsconfig
- package.json#/exports สร้างและแทนที่อัตโนมัติระหว่างขั้นตอน build
ฟีเจอร์ขั้นสูงและความเข้ากันได้
- รองรับ wildcard/subpath: รองรับการประกาศเส้นทางแบบ
./plugins/* และ build อัตโนมัติทุกเส้นทางย่อยภายใน src
- รองรับตัวเลือกใน
tsconfig.json ส่วนใหญ่ (ตัวเลือกเกี่ยวกับโมดูลบางส่วนจะถูก override ในแต่ละการ build CJS/ESM)
- อนุญาตโค้ดที่ไม่มีส่วนขยายใน import (
from "./utils" เป็นต้น) และจะปรับแก้นามสกุลอัตโนมัติขณะ build
- สภาพแวดล้อม React Native/legacy รองรับ flat build mode ได้ด้วย (ส่งผลลัพธ์ build ออกมายัง package root และเข้าถึงผ่าน index.js โดยไม่ต้องใช้ exports)
- รองรับ custom exports condition (
sourceDialects): สามารถระบุเงื่อนไขเพิ่มเติมเช่น source condition ได้
ข้อได้เปรียบเมื่อเทียบกับเครื่องมือคู่แข่ง
- แตกต่างจาก tshy/tsup/tsdown ตรงที่จัดเก็บผลลัพธ์ build ทั้งหมดไว้ใน outDir เดียว โดยไม่ต้องสร้างไดเรกทอรี/package stub แยก
- ใช้ TypeScript official API เพื่อให้เข้ากันได้สูงสุดกับแนวทางมาตรฐานล่าสุดของ Node.js/ESM/CJS/TS
- ไม่ต้องมี config เพิ่มเติมหรือใช้ bundler สร้างการเผยแพร่แพ็กเกจ TypeScript ระดับไลบรารีได้ด้วยคำสั่งเดียว
ยังไม่มีความคิดเห็น