TypeScript ครบทุกเรื่อง: Monorepo กับปัญหาและประโยชน์ของมัน
ในบทความนี้ ฉันจะไม่เปรียบเทียบ monorepo และ polyrepo เพราะมันเป็นเรื่องของปรัชญา แทนที่จะเปรียบเทียบ ฉันจะเน้นที่ประสบการณ์การสร้างและพัฒนาและถือว่าคุณคุ้นเคยกับระบบนิเวศของ JS/TS แล้ว
บทนำ
ฉันมักจะมีความฝันเกี่ยวกับ monorepo
ฉันได้เห็นแนวทาง monorepo ในขณะทำงานให้กับ Airbnb แต่เป็นเพียงสำหรับ frontend เท่านั้น ด้วยความรักที่ลึกซึ้งต่อระบบนิเวศของ JavaScript และประสบการณ์การพัฒนา TypeScript ที่ "แฮปปี้" ฉันเริ่มที่จะจัดโค้ด frontend และ backend ในภาษาเดียวกันตั้งแต่ประมาณสามปีที่แล้ว มันเยี่ยมมาก (สำหรับการจ้างงาน) แต่มันก็ไม่ดีนักสำหรับการพัฒนาเพราะโปรเจ็กต์ของเรายังคงกระจัดกระจายอยู่ในหลาย repos.
ดังที่คำกล่าวว่า “วิธีที่ดีที่สุดในการปรับปรุงโครงสร้างโปรเจ็กต์คือการเริ่มต้นใหม่” ดังนั้นเมื่อฉันเริ่มต้นธุรกิจ startups ประมาณหนึ่งปีที่แล้ว ฉันตัดสินใจที่จะใช้กลยุทธ์ total monorepo: ใส่โปรเจ็กต์ frontend และ backend แม้กระทั่งสคีมาฐานข้อมูลเข้าใน repo เดียว
ในบทความนี้ ฉันจะไม่เปรียบเทียบ monorepo และ polyrepo เพราะมันเป็นเรื่องของปรัชญา แทนที่จะเปรียบเทียบ ฉันจะเน้นที่ประสบการณ์การสร้างและพัฒนาและถือว่าคุณคุ้นเคยกับระบบนิเวศของ JS/TS แล้ว
ผลลัพธ์สุดท้ายสามารถดูได้ที่ GitHub.
ทำไมต้อง TypeScript?
พูดตามตรง ฉันเป็นแฟนของ JavaScript และ TypeScript ฉันรักความเข้ากันได้ของความยืดหยุ่นและความเข้มข้นของมัน: คุณสามารถกลับไปใช้ unknown
หรือ any
(แม้ว่าเราจะแบนฟอร์มของ any
ทุกรูปแบบในฐานข้อมูลโค้ดของเรา) หรือใช้ชุดกฎ lint ที่เข้มงวดมากเพื่อจัดโค้ดสไตล์ให้ตรงกันในทีม
เมื่อเรากำลังพูดคุยเกี่ยวกับแนวคิดของ “fullstack” ก่อนหน้านี้ เรามักจะจินตนาการถึงอย่างน้อยสองระบบนิเวศและภาษาการเขียนโปรแกรม: หนึ่งสำหรับ frontend และหนึ่งสำหรับ backend
วันหนึ่ง ฉันได้ตระหนักว่าอาจจะง่ายขึ้น: Node.js เร็วพอ (เชื่อฉันเถอะ ในกรณีส่วนใหญ่ คุณภาพของโค้ดสำคัญกว่าความเร็วในการทำงาน) TypeScript ก็โตพอ (ทำงานได้ดีในโปรเจ็กต์ frontend ขนาดใหญ่) และแนวคิด monorepo ก็ได้รับการฝึกฝนจากทีมน้อยชื่อไม่กี่ทีม (React, Babel, เป็นต้น) - ดังนั้นทำไมเราไม่นำโค้ดทั้ งหมดมารวมกัน ตั้งแต่ frontend ไปจนถึง backend? นี่สามารถทำให้นักพัฒนาทำงานได้โดยไม่ต้องเปลี่ยนบริบทใน repo หนึ่งและทำ feature ที่สมบูรณ์ใน (เกือบ) ภาษาหนึ่งเดียว
การเลือกตัวจัดการแพ็คเกจ
ในฐานะนักพัฒนาและอย่างที่เคย ฉันอดใจไม่ไหวที่จะเริ่ม coding แต่ครั้งนี้สิ่งต่าง ๆ เป็นอย่างต่างไป
การเลือกตัวจัดการแพ็คเกจเป็นสิ่งสำคัญต่อประสบการณ์การพัฒนาใน monorepo
ความเจ็บปวดของความเฉื่อย
มันคือกรกฎาคม 2021 ฉันเริ่มด้วย [email protected]
เพราะฉันได้ใช้มันมานานแล้ว Yarn เร็ว แต่ไม่นานฉันก็พบปัญหาหลายอย่างกับ Yarn Workspaces เช่น ไม่ยกเลิกการขึ้นทะเบียนที่ถูกต้อง และได้รับการติดแท็กมากมายว่า "แก้ไขในเวอร์ชันใหม่" ซึ่งพาฉันไปยัง v2 (berry).
“โอเค งั้นฉันจะอัพเกรดเดี๋ยวนี้” ฉันหยุดฝืนกับ v1 และเริ่มที่จะแปลง แต่คู่มือการโยกย้ายที่ยาวของเบอร์รี่ทำให้ฉันกลัว และฉันยอมแพ้หลังจากความพยายามล้มเหลวหลายครั้ง