ฟีเจอร์ Monorepo Tasks ของ Mise จุดประกายการถอดถอนเรื่อง Task Caching และขอบเขตของเครื่องมือ

ทีมชุมชน BigGo
ฟีเจอร์ Monorepo Tasks ของ Mise จุดประกายการถอดถอนเรื่อง Task Caching และขอบเขตของเครื่องมือ

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