Mise ได้เปิดตัวฟีเจอร์ใหม่ Monorepo Tasks ที่ออกแบบมาเพื่อจัดการงานต่างๆ ข้ามหลายโปรเจกต์ในที่เก็บเดียว แม้ว่าการประกาศนี้จะสร้างความตื่นเต้นในหมู่ผู้ใช้ แต่ก็ได้จุดประกายการอภิปรายในชุมชนอย่างมีนัยสำคัญเกี่ยวกับฟีเจอร์ที่ขาดหายไปและขอบเขตที่ขยายตัวของเครื่องมือ
คุณสมบัติหลักของ Monorepo Tasks
- Unified Task Namespace: งานต่างๆ จะถูกเพิ่มคำนำหน้าด้วยตำแหน่งของโปรเจกต์โดยอัตโนมัติ
- Tool & Environment Inheritance: เครื่องมือทั่วไปถูกกำหนดไว้ที่ root และสามารถแทนที่ได้ในแต่ละโปรเจกต์
- Wildcard Patterns: รันงานข้ามหลายโปรเจกต์ (เช่น
mise //services/...build
) - Consistent Execution: งานต่างๆ รันด้วย context ที่ถูกต้องจากทุกที่ใน monorepo
- Automatic Trust Propagation: การไว้วางใจที่ root จะใช้กับ config ลูกทั้งหมด
- Language Agnostic: ทำงานได้กับ Rust , Go , Python , Node.js และภาษาอื่นๆ
การขาด Task Caching ทำให้เกิดความกังวล
การวิพากษ์วิจารณ์ที่โดดเด่นที่สุดมุ่งเน้นไปที่การขาดความสามารถในการแคช task ชุมชนชี้ให้เห็นว่าหากไม่มีการแคช ฟีเจอร์นี้จะขาดการเพิ่มประสิทธิภาพที่สำคัญซึ่งทำให้การจัดการ task ใน monorepo เป็นไปได้จริงสำหรับโปรเจกต์ขนาดใหญ่ ข้อจำกัดนี้จะเห็นได้ชัดเจนเป็นพิเศษเมื่อรันการ build หรือ test ซ้ำๆ ข้ามหลายโปรเจกต์ ซึ่ง dependency ที่ไม่เปลี่ยนแปลงยังคงถูก rebuild โดยไม่จำเป็น
การอภิปรายเผยให้เห็นความตึงเครียดพื้นฐานระหว่างปรัชญาความเรียบง่ายของ Mise และฟีเจอร์ขั้นสูงที่ผู้ใช้คาดหวังจากเครื่องมือ monorepo แม้ว่า Mise จะวางตำแหน่งตัวเองเป็นจุดกึ่งกลางระหว่าง task runner แบบง่ายและระบบ build ที่ซับซ้อนอย่าง Bazel แต่ผู้ใช้บางคนตั้งคำถามว่าแนวทางนี้สามารถส่งมอบฟังก์ชันการทำงานที่เพียงพอสำหรับสถานการณ์ monorepo ในโลกแห่งความเป็นจริงหรือไม่
การเปรียบเทียบ Mise กับคู่แข่ง
เครื่องมือ | การรองรับภาษา | การแคช | ความยากในการเรียนรู้ | เหมาะสำหรับ |
---|---|---|---|---|
Mise | หลายภาษา | ไม่มี | ต่ำ | Polyglot monorepos, การจัดการเครื่องมือ |
Nx | เน้น JS/TS | ขั้นสูง | ปานกลาง | Frontend monorepos, dependency graphs |
Turborepo | เน้น JS/TS | ขั้นสูง | ต่ำ | การ build JS/TS ที่รวดเร็ว |
Bazel | หลายภาษา | ขั้นสูง | สูง | การ build ระดับองค์กรขนาดใหญ่ |
Just/Taskfile | หลายภาษา | ไม่มี | ต่ำ | การทำงานอัตโนมัติสำหรับโปรเจกต์เดียว |
ความกังวลเรื่อง Scope Creep ในหมู่ผู้ใช้เก่า
สมาชิกชุมชนหลายคนได้แสดงความกังวลเกี่ยวกับชุดฟีเจอร์ที่ขยายตัวของ Mise เดิมที Mise เป็นที่รู้จักในฐานะตัวจัดการสภาพแวดล้อมไดเร็กทอรีและตัวควบคุมเวอร์ชันเครื่องมือ Mise ได้เพิ่มความสามารถในการรัน task และตอนนี้คือการจัดการ monorepo ผู้ใช้บางคนกังวลว่าการขยายตัวนี้อาจส่งผลเสียต่อจุดแข็งหลักของเครื่องมือ
ผมจะโต้แย้งว่าผมไม่ต้องการฟีเจอร์ที่ทรงพลังเหล่านั้นอย่างแข็งขัน เช่น ผมเข้าใจว่าทำไมใครๆ จะต้องการมัน แต่ตอนนี้ Mise เป็นสิ่งที่เข้าใจได้ ผมสามารถนั่งลงกับเว็บไซต์เอกสารของมันและเข้าใจฟีเจอร์ใดๆ ของมันได้โดยไม่ต้องสร้างแบบจำลองทางความคิดที่แข็งแกร่งของการใช้งานพื้นฐานของมัน
ความรู้สึกนี้สะท้อนการถอดถอนที่กว้างขึ้นในชุมชนเครื่องมือนักพัฒนาเกี่ยวกับว่าเครื่องมือควรยังคงมุ่งเน้นไปที่ปัญหาเฉพาะหรือพัฒนาเป็นแพลตฟอร์มที่ครอบคลุม
การสนับสนุน Polyglot ได้รับคำชม
แม้จะมีการวิพากษ์วิจารณ์ แต่ผู้ใช้หลายคนชื่นชมแนวทางที่ไม่จำกัดภาษาของ Mise ไม่เหมือนกับเครื่องมือที่มุ่งเน้น JavaScript อย่าง Nx หรือ Turborepo, Mise ทำงานได้ดีเท่าเทียมกันกับ Rust, Go, Python และภาษาอื่นๆ ความยืดหยุ่นนี้ทำให้มีคุณค่าเป็นพิเศษสำหรับทีมที่ทำงานกับ technology stack แบบผสม ซึ่งเครื่องมือ monorepo อื่นๆ มักจะล้มเหลว
ผู้ใช้รายงานความสำเร็จในการจัดการโปรเจกต์ที่ซับซ้อนที่รวมภาษาโปรแกรมต่างๆ ซึ่งเป็นสิ่งที่เครื่องมือเฉพาะทางมักจะดิ้นรนกับมัน ความสามารถในการกำหนดเครื่องมือทั่วไปที่รากของที่เก็บในขณะที่อนุญาตให้โปรเจกต์แต่ละอันแทนที่ได้พิสูจน์แล้วว่ามีประโยชน์เป็นพิเศษสำหรับทีมพัฒนา polyglot
การรับเข้าใช้ของชุมชนและการประยุกต์ใช้จริง
ฟีเจอร์นี้ได้พบผู้รับเข้าใช้ในระยะแรกที่กำลังรวมมันเข้าไปในขั้นตอนการทำงานของพวกเขาแล้ว ผู้ใช้หลายคนรายงานการใช้ Mise เพื่อแทนที่เครื่องมือหลายตัวในไปป์ไลน์การพัฒนาของพวกเขา โดยชื่นชมแนวทางการกำหนดค่าแบบรวม ประโยชน์ในทางปฏิบัติของเครื่องมือจะเห็นได้ชัดเจนที่สุดในสภาพแวดล้อมองค์กรที่การตั้งค่าสภาพแวดล้อมการพัฒนาที่ซับซ้อนอาจเป็นเรื่องท้าทาย
อย่างไรก็ตาม ลักษณะทดลองของฟีเจอร์หมายความว่า API อาจยังคงพัฒนาต่อไปตามข้อเสนอแนะของผู้ใช้ ความไม่แน่นอนนี้ร่วมกับการตัดสินใจที่ผิดปกติของโปรเจกต์ในการปิดใช้งาน GitHub issues เพื่อสนับสนุนการอภิปราย ได้ทำให้เกิดคำถามบางอย่างเกี่ยวกับกระบวนการพัฒนาและแนวทางการมีส่วนร่วมของชุมชน
การถอดถอนรอบ Mise Monorepo Tasks สะท้อนคำถามที่กว้างขึ้นเกี่ยวกับปรัชญาการออกแบบเครื่องมือในระบบนิเวศนักพัฒนา ขณะที่ทีมต่างๆ แสวงหาโซลูชันที่สร้างสมดุลระหว่างความเรียบง่ายกับฟังก์ชันการทำงาน ความสำเร็จของฟีเจอร์นี้น่าจะขึ้นอยู่กับว่า Mise สามารถแก้ไขความกังวลเรื่องการแคชในขณะที่รักษาแนวทางที่เข้าถึงได้ต่อการจัดการ monorepo หรือไม่
อ้างอิง: Introducing Monorepo Tasks #6564