یلپ ۱.۴ میلیون خط کد رو از Flow به TypeScript برد
خلاصهٔ کاملتر
تو بلاگ مهندسی Yelp اومده که این شرکت سال ۲۰۱۷ برای تایپچک جاوااسکریپتش Flow رو به TypeScript ترجیح داد، چون اون موقع پشتیبانی بهتری از React داشت و سریعتر بود. ولی چند سال بعد ورق برگشت: مخزن DefinitelyTyped هزاران پکیج بیشتر از flow-typed داشت، پکیجهای بیشتری هدر تایپ TypeScript رو داخل خودشون میفرستادن، و اواسط ۲۰۲۱ تیم Flow اعلام کرد تمرکزش رو میذاره روی نیازهای داخلی فیسبوک. برنامهریزی مهاجرت اوایل ۲۰۲۲ شروع شد.
به گفتهٔ نویسنده، ستارهٔ شمال تیم حفظ اعتماد به تایپچک بود: نه «موقتاً» خاموش کردنش، نه ریختن دستهجمعی کامنتهای ignore. تجربهشون این بوده که کدی که پوشش تایپچکر یا تست یا لینتر رو از دست بده، تقریباً هیچوقت پسش نمیگیره. همین قید، بازنویسی یکجا و فریز کردن ریپو رو منتفی کرد و یعنی باید Flow و TypeScript همزمان تو یه ریپو و توی production کنار هم کار میکردن — چیزی که خودشون هم میگن ازش میترسیدن.
کار پکیجبهپکیج جلو رفت. تبدیل انبوه با ابزار متنباز flowts انجام میشد (بعدها با codemod بهتر استرایپ جایگزین شد) و بعد flowgen فایل .d.ts تولیدشده رو برمیگردوند به هدر سازگار با Flow تا کدهای Flow که ازش import میکردن هنوز تایپچک بشن. چون ابزار برعکسش وجود نداشت، مجبور بودن از عمیقترین وابستگیهای داخلی شروع کنن و درخت رو بالا بیان. مونوریپوی Lerna باعث شد کل زنجیرهٔ ابزار با یه PR آپدیت بشه، نه صدها تا.
قبل از عرضهٔ عمومی، خود Webcore و تیم Design Systems حدود ۹۰ پکیج پایه رو تبدیل کردن تا ایرادهای ابزار در بیاد و تیمها موقع شروع منتظر وابستگیهاشون نمونن. مهاجرت مه ۲۰۲۳ برای تیمهای محصول باز شد و شش ماه بعد از حدود ۱۰۰ پکیج به بیش از ۲۷۰ رسید. وقتی موج اولیه خوابید، تیم ابزاری ساخت که به هر پکیج بر اساس تعداد پکیجهایی که آزاد میکنه امتیاز اهمیت میداد، و با Graphviz از باقیماندهٔ درخت Flow نقشه میکشید تا بشه برنامهٔ پایانی رو چید.
آخرین پکیج Flow اوایل فوریهٔ ۲۰۲۶ مهاجرت کرد. جمعاً ۱.۴ میلیون خط کد تو سه سال و هفت ماه منتقل شد و ته کار فقط حدود ۶۰۰۰ دستور @ts-expect-error باقی موند که ۲۰۰۰ تاش هم مربوط به چند پکیج آخره که با سرکوب خودکار خطا تموم شدن. پوشش تایپ ۹۶.۴۴٪ شد، خیلی بالاتر از ۸۳.۱۵٪ دوران Flow. کنار گذاشتن Flow راه رو برای ابزارهایی مثل swc و @typescript-eslint هم باز کرد.
نکات کلیدی:
- ۱.۴ میلیون خط کد و ۵۷۰ پکیج، طی سه سال و هفت ماه، بدون قطع شدن تایپچک
- پل ارتباطی بین دو دنیا: flowts برای تبدیل و flowgen برای ساخت هدر Flow از .d.ts
- مونوریپو کلید کار بود؛ تبدیل در سطح پکیج انجام شد نه فایلبهفایل
- پوشش تایپ از ۸۳.۱۵٪ به ۹۶.۴۴٪ رسید و ۸۲٪ مهندسها بهرهوری بیشتری گزارش دادن
- LLMهای سال ۲۰۲۳ نتونستن تبدیل خودکار رو قابلاتکا انجام بدن و از زنجیرهٔ ابزار حذف شدن
- درس اصلی تیم: ضربالاجلهای مرحلهای خیلی بیشتر از سپردن کار به وقت آزاد تیمها جواب داد




