大多數(shù)TypeScript構(gòu)建問題的根源,在于團(tuán)隊(duì)把TypeScript編譯器(tsc)同時(shí)當(dāng)成了類型檢查器和構(gòu)建工具。理想的流水線里,這兩件事本不該混在一起。常見的CI流程是:先用tsc把TypeScript轉(zhuǎn)譯成JavaScript,再把輸出交給webpack或Rollup打包。這種串行步驟每次部署都要白白消耗2到4分鐘,而類型檢查器卡在那里,更快工具的效率完全發(fā)揮不出來。
--noEmit標(biāo)志的出現(xiàn),就是為了把類型檢查和代碼生成徹底解開。在正確的配置下,CI流水線會(huì)讓類型校驗(yàn)和專門的轉(zhuǎn)譯器(比如esbuild或swc)并行跑。實(shí)測(cè)下來,構(gòu)建速度能提高60%到80%,而類型安全一點(diǎn)不打折。這里頭的代價(jià)藏得很深,但每一秒都算賬:CI只要等著tsc往外吐文件,你的部署就在隊(duì)列里多躺一秒。
![]()
TypeScript 6.0的原生執(zhí)行模型,把這個(gè)等式又推了一把。現(xiàn)在編譯器在本地開發(fā)階段,壓根不需要先生成中間JavaScript文件,而現(xiàn)代打包器直接就能從.ts文件里把類型標(biāo)記剝離掉。tsc終于可以只做它最擅長(zhǎng)的一件事:驗(yàn)證類型。生產(chǎn)構(gòu)建的整個(gè)環(huán)節(jié),再也不必碰TypeScript編譯器的輸出邏輯。
這一轉(zhuǎn)變的直接效果是,打包器(esbuild、swc)剝離TypeScript語法的速度,能達(dá)到tsc轉(zhuǎn)譯速度的10到20倍,當(dāng)然它們沒法校驗(yàn)類型。并行流水線的思路很清晰:讓tsc --noEmit和打包工具同時(shí)運(yùn)行,類型錯(cuò)誤一個(gè)不落,構(gòu)建流程也不再被短板拖累。
唯一還需要tsc出場(chǎng)的情況,是庫(kù)需要生成聲明文件(.d.ts)的時(shí)候。但對(duì)于應(yīng)用代碼,完全不必再讓tsc生產(chǎn)任何輸出。只要把noEmit設(shè)為true,CI里的類型檢查就變成了一個(gè)純粹的守護(hù)動(dòng)作,快速、無阻塞,并且與你選的轉(zhuǎn)譯工具完全獨(dú)立開來。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.