โครงการ Ledger Live Monorepo: ตอนที่ 2 - เครื่องมือ (ทำให้มันเปล่งประกาย) | บัญชีแยกประเภท

โครงการ Ledger Live Monorepo: ตอนที่ 2 – เครื่องมือ (ทำให้มันเปล่งประกาย) | บัญชีแยกประเภท

โหนดต้นทาง: 2985172

รายการที่สองของซีรีส์โพสต์บล็อก "Ledger Live Monorepo Project" ซึ่งนักพัฒนา Ledger บอกเราถึงเรื่องราวของการโยกย้ายฐานโค้ด Ledger Live ขนาดใหญ่ไปยังพื้นที่เก็บข้อมูลแบบ mono หากคุณพลาดตอนที่ 1 โปรดดูที่นี่:

หลังจากพิสูจน์ได้ว่าสถาปัตยกรรม monorepo เป็นโซลูชันที่ใช้ได้ เราก็เริ่มพิจารณาเครื่องมือที่มีอยู่เพื่อนำแผนของเราไปใช้

จัดการหลายโครงการ

ในทีม Ledger Live เรานำทางในระบบนิเวศของ JavaScript และโชคดีสำหรับเรา เรารู้อยู่แล้วหลายวิธีในการจัดการหลายโครงการด้วยตัวจัดการแพ็คเกจของเรา วิธีแก้ปัญหาที่เป็นไปได้บางส่วน ได้แก่:

  • NPM (รองรับพื้นที่ทำงานแต่มีทางเลือกที่ดีกว่า)
  • เส้นด้าย1 (กลายเป็นทางเลือกที่เก่าเกินไป ดีกว่า และมีประสิทธิภาพมากขึ้น)
  • เส้นด้าย ≥ 2 (แนวคิดที่น่าสนใจ แต่ Plug n Play ไม่รองรับทุกที่ โดยเฉพาะกับ React Native)
  • พน.น (symlinks สร้างขึ้นโดยคำนึงถึงพื้นที่ทำงาน ดิสก์มีประสิทธิภาพ)

หลังจากดูทั้งหมดนี้แล้วเราก็ตัดสินใจไปด้วย พน.น สำหรับ:

  • ประสิทธิภาพของดิสก์ (ใช้ไฟล์ virtual จัดเก็บ และ ลิงก์เชื่อมโยงดังนั้นแพ็คเกจจะถูกดาวน์โหลดเพียงครั้งเดียวจากนั้นจึงเชื่อมโยงกับ node_modules ของคุณจากร้านค้าเสมือน)
  • ความเร็ว (เนื่องจากแพ็คเกจถูกแคชไว้ การติดตั้งครั้งต่อไปจะเร็วกว่ามาก)
  • สร้างขึ้นเพื่อรองรับพื้นที่ทำงาน/สถาปัตยกรรม monorepo (นามแฝง การเรียบเรียง ฯลฯ…)

บนกระดาษ พน.น เป็นอัญมณีที่สมบูรณ์ แต่ symlink นั้นค่อนข้างแปลกในการตั้งค่าอย่างถูกต้อง (อีกครั้งโดยเฉพาะกับ React Native)

โอเค เราเลือกได้แล้ว เราจะไปด้วย พน.น.

การเรียบเรียงสคริปต์

แม้ พน.น เพิ่มการเรียบเรียงฟีเจอร์ต่างๆ มากขึ้นเรื่อยๆ แต่ก็ยังไม่ครอบคลุมทุกสิ่งที่เราอยากทำ เช่น:

  • การสร้างตามลำดับ
  • เก็บเอาไว้.

สำหรับสิ่งเหล่านี้ เราพบคู่แข่งที่น่าสนใจสองรายที่เราจำเป็นต้องพิจารณา:

  • NX (โดยทีมงานเชิงมุม)
  • เทอร์โบเรโป (ซึ่งเพิ่งประกาศเวอร์ชัน 1.0.0 ตอนที่เราเริ่มทำงาน และตอนนี้กำลังทำงานร่วมกับทีม Vercel)

เราได้พิสูจน์แนวคิดทั้งสองอย่างแล้ว

NX มีคุณสมบัติ เครื่องกำเนิดไฟฟ้า ระบบอัตโนมัติ กราฟการพึ่งพาที่ยอดเยี่ยม ฯลฯ... แต่มันเพิ่มค่าใช้จ่ายจำนวนมาก และเนื่องจากค่อนข้างดื้อดึง เราจึงต้องปฏิบัติตามแบบแผนของพวกเขา

เทอร์โบเรโป ในทางกลับกัน เป็นคุณสมบัติพื้นฐานที่ค่อนข้างชาญฉลาด แต่เป็นโซลูชันแบบพลักแอนด์เพลย์ที่สะดวกสบายซึ่งเราสามารถเปลี่ยนแปลงได้อย่างรวดเร็วหากจำเป็น

แม้ เทอร์โบเรโป มีคุณสมบัติน้อยกว่า NXมันทำ 2 สิ่งที่เรากำลังมองหา:

  • การเรียบเรียงบิลด์ตามแผนผังการพึ่งพา (และบิลด์ที่เกิดขึ้นพร้อมกัน)
  • การแคช (บิลด์จะถูกแคชและ 'เล่นซ้ำ' หากรหัสไม่เปลี่ยนแปลง)

นั่นบวกกับการดรอปเข้า/ออกที่ง่ายดาย ทำให้เราเลือกเด็กใหม่ในบล็อก TurboRepo.

รุ่น

เราพิจารณาวิธีแก้ปัญหาหลายอย่างเช่นกัน แต่ท้ายที่สุดก็ตัดสินใจใช้ https://github.com/changesets/changesets เนื่องจากเป็นเครื่องมือหนึ่งที่ TurboRepo แนะนำ และหลังจากอ่านเอกสารไปบ้างแล้ว ดูเหมือนว่าจะสอดคล้องกับความต้องการของเรา

นักพัฒนาจะต้องเข้มงวดมากขึ้นอีกเล็กน้อยในขั้นตอนการพัฒนาและการจัดหา changesets (ไฟล์อธิบายว่าไลบรารีใดที่โค้ดของพวกเขาเปลี่ยนแปลง ความรุนแรงตาม ซัมเมอร์ แบบแผนและคำอธิบายของการเปลี่ยนแปลง) เหล่านี้ changesets จากนั้นจะใช้เพื่อชนเวอร์ชันของแพ็คเกจโดยอัตโนมัติตามความรุนแรงที่กำหนด รวมถึงสร้างอัตโนมัติของ บันทึกการเปลี่ยนแปลง. ยิ่งไปกว่านั้น เครื่องมือยังช่วยให้ pre release โหมด 🍒 บน 🍰

อะไรต่อไป ?

หลังจากตัดสินใจเลือกเครื่องมือได้แล้วก็ถึงเวลาเริ่มทำงาน ในบทความบล็อกถัดไป เราจะพูดถึงระบบบิลด์และ dev-ops / ระบบอัตโนมัติ / การรวมอย่างต่อเนื่องในบริบทของที่เก็บข้อมูลแบบโมโน


วาเลนติน เด อัลเมดา
ประสบการณ์นักพัฒนาและเทคโนโลยีหลัก – Ledger Live

ประทับเวลา:

เพิ่มเติมจาก บัญชีแยกประเภท