การอัปเดตล่าสุดของ Bun นำมาซึ่งฟีเจอร์ที่เปลี่ยนเกมส์ซึ่งสัญญาว่าจะปฏิวัติวิธีการติดตั้งแพ็กเกจ JavaScript โดยเฉพาะสำหรับผู้ใช้ Windows ตัว isolated node linker ใหม่ที่ได้แรงบันดาลใจจากแนวทางของ pnpm กำหนดจะเปิดตัวพร้อมกับ Bun v1.2.19 และแก้ไขปัญหาที่มีมานานเกี่ยวกับการจัดการ dependency พร้อมทั้งมอบผลตอบแทนด้านประสิทธิภาพที่น่าประทับใจ
การเพิ่มประสิทธิภาพอย่างมหาศาลบน Windows
โหมดการติดตั้งแบบแยกส่วนมอบการปรับปรุงความเร็วที่น่าทึ่ง โดยเฉพาะบนระบบ Windows ที่ผู้ใช้สามารถคาดหวังการติดตั้งแพ็กเกจที่เร็วขึ้น 10 ถึง 20 เท่า ในขณะที่ผู้ใช้ macOS และ Linux จะเห็นการปรับปรุงที่เจียมเนื้อเจียมตัวกว่า แต่ผลกระทบด้านประสิทธิภาพยังคงเป็นบวกในทุกแพลตฟอร์ม การปรับปรุงที่สำคัญนี้ทำให้ Bun เป็นตัวเลือกที่น่าสนใจยิ่งขึ้นสำหรับนักพัฒนาที่ทำงานในสภาพแวดล้อมแพลตฟอร์มผสม
การปรับปรุงประสิทธิภาพ:
- Windows : การติดตั้งเร็วขึ้น 10 ถึง 20 เท่า
- macOS / Linux : ผลกระทบต่อประสิทธิภาพในทางบวกเล็กน้อยหรือเป็นกลาง
ความน่าเชื่อถือที่เพิ่มขึ้นสำหรับ Monorepos
นอกเหนือจากความเร็วแล้ว isolated linker ยังจัดการกับปัญหาความน่าเชื่อถือที่สำคัญซึ่งได้รบกวนการจัดการแพ็กเกจ JavaScript ด้วยการป้องกัน phantom dependencies และ dangling symlinks ฟีเจอร์นี้ทำให้การติดตั้ง Bun เชื่อถือได้มากขึ้นในสภาพแวดล้อม monorepo ระบบนี้รับประกันว่า dependencies สามารถเข้าถึงเฉพาะเวอร์ชันของแพ็กเกจอื่นๆ ที่ระบุไว้อย่างชัดเจนในไฟล์ package.json ของตัวเอง ซึ่งช่วยขจัดข้อผิดพลาดรันไทม์ที่ลึกลับซึ่งเกิดจากการแก้ไข dependency แบบโดยนัย
Phantom dependencies: แพ็กเกจที่ทำงานในการพัฒนาแต่ไม่ได้ประกาศอย่างชัดเจนเป็น dependenciesDangling symlinks: symbolic links ที่เสียหายซึ่งชี้ไปยังไฟล์หรือไดเรกทอรีที่ไม่มีอยู่
โครงสร้างไดเรกทอรี:
node_modules/
├── .modules.yaml
├── [email protected]/
│ └── node_modules/
│ └── [email protected]
└── my-dependency -> .modules/[email protected]/
การดึงดูดใจของระบบนิเวศที่เติบโต
ข้อเสนอแนะจากชุมชนเผยให้เห็นบทบาทที่ขยายตัวของ Bun นอกเหนือจากการจัดการแพ็กเกจเท่านั้น นักพัฒนากำลังนำ Bun มาใช้มากขึ้นสำหรับ shell scripting การดำเนินการฐานข้อมูล และสคริปต์ยูทิลิตี้ โดยชื่นชมฟีเจอร์ในตัวเช่นการสนับสนุน SQLite และฟังก์ชัน S3 client ความหลากหลายนี้ทำให้ Bun อยู่ในตำแหน่งของ JavaScript runtime ที่ครอบคลุมมากกว่าเป็นเพียงตัวจัดการแพ็กเกจอีกตัวหนึ่ง
Bun กำลังค่อยๆ กลายเป็นโซลูชันครบเครื่องสำหรับระบบนิเวศ js
Isolated linker เป็นอีกก้าวหนึ่งสู่แนวทางแบบรวมศูนย์นี้ โดยเสนอทางเลือกที่เชื่อถือได้และเร็วกว่าการติดตั้ง npm แบบดั้งเดิมให้กับนักพัฒนา ในขณะที่ยังคงความเข้ากันได้กับเวิร์กโฟลว์ที่มีอยู่
ฟีเจอร์ที่รองรับ:
- การติดตั้ง dependency เดี่ยวขั้นพื้นฐาน
- แพ็กเกจแบบ scoped (@types/*)
- Transitive dependencies
- Cyclic dependencies
- Folder dependencies
- การรองรับ workspace
- การตรวจสอบโครงสร้าง symlink
ข้อจำกัดปัจจุบันและมุมมองอนาคต
แม้ว่าฟีเจอร์นี้จะพร้อมสำหรับการทดสอบผ่านช่องทาง canary release แต่ปัจจุบันมีบั๊กเฉพาะ Windows ที่ป้องกันไม่ให้ทีม Bun ใช้การติดตั้งแบบแยกส่วนในรีโพซิทอรีของตัวเอง ปัญหานี้ต้องได้รับการแก้ไขก่อนการเปิดตัวเวอร์ชันเสถียร แม้ว่าผู้ใช้งานแรกๆ สามารถทดลองใช้ฟีเจอร์นี้ได้โดยใช้ bun install --linker=isolated
หรือโดยการกำหนดค่าในไฟล์ bunfig.toml ของพวกเขา
การใช้งานนี้รองรับสถานการณ์การจัดการแพ็กเกจหลักทั้งหมด รวมถึง scoped packages, peer dependencies, workspaces และแม้แต่ dependency cycles ที่ซับซ้อน ทำให้เป็นโซลูชันที่แข็งแกร่งสำหรับสภาพแวดล้อมการพัฒนาในโลกแห่งความเป็นจริง
อ้างอิง: implement nodeLinker: isolated in bun install #20440