知名非同步應用函式庫RxJS釋出第6版,這個版本做了一些突破性的變革,縮減了RxJS函式庫的API介面,並且使用者只要安裝向後相容套件,原本RxJS 5的應用程式就可以不需要更改任何程式碼無痛使用RxJS 6,開發者將有充足的時間進行升級,但在RxJS 7釋出前,需要棄用所有被淘汰功能。

能將RxJS 5應用程式無痛升級到RxJS 6,這大概是最令開發者開心的消息了。RxJS 6在相容性上做了很多努力,RxJS團隊釋出rxjs-compat套件,該套件會在RxJS 5和RxJS 6之間創造一個相容層,應用程式便能持續以原本的程式碼繼續運作,直到開發者完全將應用程式升級到RxJS 6為止。

值得一提的是,將該向後相容套件rxjs-compat加入專案中,整體應用程式的容量還需要加上套件安裝的大小,而如果開發者的專案還整合了Webpack,便會讓整體影響變大,因此官方建議開發者,一旦將應用程式升級到了RxJS 6,便要將rxjs-compat套件移除,該套件僅提供升級過渡使用。

但rxjs-compat套件也並非萬能,官方提到在兩個情況下,rxjs-compat沒辦法提供相容支援,第一是在極少數的實例中,開發者會定義自己的TypeScript原型運算子並且修改了Observable命名空間,在這樣的情況開發者需要更新運算子的程式碼,以重新編譯TypeScript的部分。

另外,RxJS 6已經不支援在try/catch中呼叫Observable.subscribe(),現在於try/catch中處理非同步錯誤,需要在Observable.subscribe()方法中回呼error,也就是說Observable.subscribe()必須要定義error回呼才能處理非同步錯誤。官方也提醒開發者,當程式碼完成從第5版升級到第6版,從專案移除rxjs-compat套件相依性後,需要進行重構以停止應用程式依賴RxJS 5的功能。

在RxJS 6中,不少開發者的程式碼撰寫風格需要改變,官方鼓勵使用Pipeable運算子而非Chaining,部份原因是以補丁添加的運算子不提供可樹搖功能(Tree-shakeable),系統難以對程式碼進行最佳化。此外,所有Observable的類別都被移除,而原本這些類別提供的功能以運算子以及函式取代,官方強調,開發者不用擔心,每一個被移除的類別都可以找到相對應的功能替代。

RxJS也提到,TypeScript開發者可以使用rxjs-tslint,這將能幫助重構版本5到6的輸入路徑,另外,在RxJS 7釋出時,開發者將需要棄用所有被淘汰的功能。


Advertisement

更多 iThome相關內容