什麼時候選擇 Babel,什麼時候選擇 TypeScript?

項目現在的需求,可以預見的,應該有4萬行左右的代碼量(js native),但是不知道就目前的情況,我應該怎麼做技術選型,nodejs可以選擇使用stable版或者最新的release。項目不是特別的關鍵(我的意思是癱個10來分鐘也沒關係)。

我的想法是:

  1. 盡量一步到位,也就意味著採用更激進的語法和特性,而不去使用koa1/generator/yield;但這也是個非常穩妥的方案,有豐富的module和middleware,隨處可查的解決方案。

  2. koa2+babel或者tsc看起來會比較modern,而且ES7或者更往後的版本中,await/async被納入標準後,應該是拒絕callback hell的最終方案。

ps: team里的人都寫過express、koa1、java、c#並且已經上線。


你可以搞一堆babel插件,然後找一個最佳配置,然後每隔一段時間更新下插件版本,來保證javascript時刻能用最新的feature。

或者,你可以直接用TypeScript。


4 萬行,java, c#,就這幾個關鍵詞那還是 TypeScript 吧。


佔個位子,後面補充最近的思考。


參考thinkjs,使用ts開發,編譯成es6,然後用babel編譯成es5,其中的promise用bluebird代替


正好在寫一個TypeScript為主的API service,來答。我把我們的經驗說出來,具體的題主自己考慮唄。

首先,我看到上面有答案說從c#,java過來就比較適合ts,我不是很明白。只是因為ts和c# java一樣能指定type就用ts不是個很好的決策。ts要指定type這個事情長遠來看是好的,但是短期項目的話用在指定type上的時間簡直拖慢開發效率,尤其是面對class variable的時候。

(或者是因為其他原因才這麼說的話,快來指點我)

我們用的是Nodejs 6.4.0,搭配restify,並填了無數坑。剛開始的時候用的純js加ES6 syntax,用babel transpile。其實這並沒給我們造成太大的問題,只是偶爾會因為拼寫錯誤來幾個bug。非同步操作統一使用Promise,所以沒有callback套callback的情況,但是會顯得代碼很長,而且剛接觸項目的人分析代碼要一個個then()地看。

後來@滕亦飛說,換TypeScript吧,發覺ts已經實現了async await。這個簡直優雅。對一切非同步操作await一下就好,原本要包裝成promise的函數只用寫成async。代碼長度縮減很多,邏輯一條線從頭到尾很連貫。美中不足是幾乎每個庫都要typings來指定type。如果一個庫剛更新但是typings沒有更新,ide和tsc就會報錯說找不到type。

我們也有aggressive(?)的地方,用了大量decorator,無論是babel或者tsc都要開experimental來轉譯。這些東西的問題就是不夠穩定,babel對這個的實現就改過,我們還要去研究babel是如何實現這個東西的。ts相對穩定一些,但也只是相對,畢竟是experimental feature。

在上課,寫得很亂,有時間修整一下。


c#並且已經上線。。。。。。。。

還是繼續吊在微軟的typescript上面吧,不然折騰起來太費勁。。。。。。


激進的話,直接上fibjs吧,一步到位,神馬callback,promise,generator,await通通拜拜


我覺得這兩個都可以不用。根據你的描述,應該是用nodejs,很多高級特性已經支持。至於callback hell用async/await加bluebird代替,就可以了。async/await可以用第三方lib模擬,性能不會損多少。


像我這樣狂熱使用 TS,但把 TS 寫成「帶類型的 ES5」,根本不用任何 ES6、ES7 特性的人,是不是屬於異端……


babel是過度方案,當es6/es7在瀏覽器逐漸支持後就不需要了,所以代碼是面向未來寫的。但由於為了盡量接近語言標準,很多轉譯是很臃腫的,例如async/generator等,還有一些特性是es5模擬不出來的,不能用。這些都要看babel的文檔。所以我現在只敢放心用明顯是語法糖的es6/7特性,例如模版字元串,解構賦值等。用在服務端可以不考慮這個^_^

typescript有微軟背書,有angularjs2案例,前景也是很光明的。類似的方案還有fb的flow,案例有react。有類型系統對IDE要友好很多,如果使用IDE開發,強烈建議用這類方案。


沒看明白你的表述...如果是服務端的js代碼,nodejs老早就支持es6的特性了,那何須用babel更不要說typescript了。

如果是瀏覽器端的js代碼,我感覺同樣也不需要用到這兩個東西,因為一旦用了這兩種中的任意一種就意味著你沒法拿你寫的源碼來做調試了,在我看來可調式可測試性是一件極其重要的事情,所以,我認為還不如自己用es5語法實現es6的特性。

當然如果已定要從babel和typescript中選的話,建議選babel吧,畢竟可能在10年之後這些代碼也許能完全被瀏覽器支持


推薦閱讀:

現在 TypeScript 的生態如何?
為什麼 Angular 2 不採用 JSX?
Typescript會不會借著Angular2,成為主流編程語言?
vscode編輯器打開大項目能夠快速預覽,這是如何做到的?軟體演算法比atom做的好?
如何看待 Angular 2.0 使用的 AtScript 是 TypeScript 的超集?

TAG:JavaScript | 技術選型 | Nodejs | TypeScript | Babel |