จากนี้ไปมีแค่ ESM เท่านั้น
(antfu.me)ก่อนหน้านี้ผมยังมองในแง่ลบต่อแนวทางที่เปลี่ยนไลบรารี JavaScript ทั้งหมดไปเป็น ESM อย่างรวดเร็ว แต่ในตอนนี้ เทคโนโลยีและสัดส่วนการใช้งานที่เกี่ยวข้องกับ ESM ได้พัฒนาขึ้นทุกวัน ทำให้ผมอยากให้ผู้พัฒนาทุกคนย้ายมาใช้ ESM ให้ได้ เหตุผลมีดังนี้
เหตุผล
- เครื่องมือพร้อมแล้ว
- มีเครื่องมือมากมายที่ช่วยให้ย้ายไปใช้ ESM ได้ เช่น Vite, ESLint, tsx
- แนวทางไลบรารีแบบเดิม (CJS) พึ่งพา ESM ซึ่งเป็นแนวทางสมัยใหม่ได้ไม่ง่ายนัก ดังนั้นเพื่อการพัฒนาในอนาคต เราควรเดินหน้าต่อไป
- ใน Node.js รุ่นใหม่ มีการพัฒนาวิธีเรียกใช้ไลบรารี ESM ผ่านฟังก์ชัน
require()ซึ่งช่วยให้การนำ ESM ไปใช้ทำได้ง่ายขึ้น
- ปัญหาการรองรับสองแบบ
- เนื่องจากความแตกต่างด้านการออกแบบของทั้งสองรูปแบบนั้นชัดเจนมาก ความสามารถในการทำงานร่วมกันจึงลดลงอย่างมาก
- ผู้ใช้ต้องคอยตรวจสอบทีละตัวว่าแต่ละอย่างรองรับ ESM หรือไม่ ซึ่งสร้างความยุ่งยาก
- เพราะต้องรองรับทั้งสองรูปแบบ ขนาดของแพ็กเกจจึงใหญ่ขึ้นมาก
ควรเปลี่ยนเมื่อไร?
- แพ็กเกจใหม่ควรย้ายไปเป็น ESM โดยไม่มีข้อยกเว้น
- สำหรับไลบรารีที่มุ่งเป้าไปยังเบราว์เซอร์ จะสามารถสร้าง bundle ที่เบากว่าได้
- แม้แต่โปรแกรม CLI ก็ช่วยให้ผู้ใช้งานค่อย ๆ ย้ายไปสู่ ESM ได้อย่างเป็นธรรมชาติ
- แต่ก่อนหน้านั้น สิ่งสำคัญคือต้องรู้สถานะของไลบรารีที่ใช้อยู่เดิมและความต้องการของผู้ใช้
ต้องเปลี่ยนมากแค่ไหน?
เพื่อดูภาพรวมของ dependencies ของไลบรารี ผมได้สร้าง dependency inspector ขึ้นมา คุณสามารถดูสถานะของไลบรารีที่พึ่งพาอยู่ รวมถึงผลกระทบหากเปลี่ยนไปใช้ ESM ได้
สิ่งที่จะทำต่อจากนี้
ผมมีแผนจะค่อย ๆ เปลี่ยนแพ็กเกจที่ผมดูแลอยู่ไปเป็น ESM และตรวจสอบ dependencies อย่างละเอียด นอกจากนี้ยังมีไอเดียที่น่าสนใจอีกมากสำหรับ node-modules-inspector เพื่อมอบข้อมูลเชิงลึกที่มีประโยชน์ยิ่งขึ้น และช่วยค้นหาแนวทางที่ดีที่สุดต่อไปในอนาคต
ผมตั้งตารอระบบนิเวศ JavaScript/TypeScript ที่เบากว่า ยืดหยุ่นกว่า และปรับแต่งให้เหมาะสมได้มากกว่าเดิม หวังว่านี่จะเป็นประโยชน์
ยังไม่มีความคิดเห็น