不依賴 Gulp、Babel、WebPack,還能優雅地寫程式碼嗎?
純屬吐槽文,不服來辯。
不知道什麼時候開始,前端開發已經到了不開一個 watcher 就無法工作的地步了。不依賴 Gulp 、 Babel 、 WebPack ,還能優雅地寫程式碼嗎?
那我就帶你來回顧一下這一切是怎麼發生的。
從哪開始說好呢?我們就從『前端打包』開始吧。
前端打包
很久以前(也就五年左右吧,但是五年前端已經大變樣了),頁面的 JS 壓縮(混淆)一般是用谷歌的 closure compiler 做的。但是突然蹦出來個 Node.js ,前端開發者們就開始第一次小試牛刀了,用 Node.js 來做 JS 壓縮,一般都是用 uglify-js 來做。
JS 壓縮做了, CSS 壓縮是不是也可以做? JS lint 是不是也可以做?自動測試是不是也可以做?檔案合併是不是也可以做?
於是 grunt 應運而生,它可以幫你把這些事情都做了,只需要配置一個簡單的 Gruntfile 即可。
同一時期, AMD 和 CommonJS 也出現了, Node.js 用 CommonJS 載入模組,瀏覽器用 AMD 來載入模組。前端們覺得可以統一一下,都用 CommonJS 來寫,於是用上 browserify 之類的工具。
好了,這個時候一個前端專案需要有一個 Grunt (後來又有了 Gulp 等)任務用來打包前端資源,看起來就是一個標配了。
框架的興起
前端們一直吐槽新手們用 jQuery 寫出的「義大利麵條」式的程式碼,於是發明的了一些框架,一開始比較火的是 MVC 框架(如 Backbone.js ),火了沒多久,前端們發現 MVC 框架有很多相似的程式碼都是在做「繫結事件」「更新 view 」這些事情了,於是發現了 MVVM 框架(一種早年間被微軟玩過的設計模式),最著名的庫就是 AngularJS 。
此時的庫都是不需要額外用 Grunt 做轉譯的。
直到 React 的出現。 React 背後的工程師(顯示不是前端)發明了一種新的語法—— JSX ,把 HTML 和 JS 混合起來寫。前端們看了一眼表示這才是寫模板正確的姿勢。唯一的問題是這種語法瀏覽器不支援,於是需要把 JSX 翻譯成 JS 。
此時 Grunt 大概也因為效能太低被 Gulp 取代了。
於是此時用 React 的專案一定會去用 Gulp 將 JSX 翻譯成 JS 。
ECMAScript 的發展
同時期, ES 發展也是非常迅猛。
IE 8 不支援 ES5 ,於是前端們說,「 IE 8 去死吧」,不想再支援 IE 8 了,因為那幾年移動端發展迅猛,網頁主要都是 H5 頁面(不要問 H5 是不是 HTML5 ,不是 HTML5 ),所以很多前端確實不需要管 IE 8 。現在想想, Windows Phone 的失敗,真是前端的福音啊。
前端就開始追新了,一定要第一時間用上最新版的 JS 語法。但是即便是 Chrome 和 Firefox 也不可能那麼快就支援最新語法。於是前端說,不過就是在 Gulp 裡再加一道轉譯嘛,用 Babel 把 ES 2016 的語法轉譯成 ES 5 就好了。
於是 Gulp 裡又多了一項任務。
重新思考
經過這兩三年的飛速發展,前端們是不是應該重新思考一下,做一個網頁之前要加這麼多 Gulp 任務的初衷到底是什麼?是否解決了問題。
從目前的結果來看,基本可以總結為
- DOM 不好用,換成虛擬 DOM
- CSS 不好用,換成 CSS in JS
- 瀏覽器支援的 JS 不好用,換成 ES 最新版語法,然後轉譯為瀏覽器支援的 JS
- DOM Event 不用了,去新造一個 Event 機制。
- Gulp 用得太多了 watch 很慢,於是加上了 hot module replacement
基本把能拋棄的都拋棄了。
實際上這些變化非常適合複雜的 Web 應用,然而 90% 的頁面根本不是單頁面應用好嗎!
能不能讓我寫一個 CSS 一個 JS 重新整理一下就能看到效果!為什麼我要花那麼多時間來學習轉譯工具,以及解決轉譯過程中的各種問題。
總感覺『弊大於利』。甚至有的時候覺得這是『沒有問題,創造問題也要上』。
大家可以思考這麼幾個問題:
- 不用 bable,用瀏覽器支援的 ES 行不行?(IE 8 不支援?shim?)
- 不用 JSX(React 寫起來就不爽了,最討厭 React 這點了)行不行?
- 不用 Webpack 行不行?如果你依賴的 Webpack 被前端界拋棄了怎麼辦?顯然 JS 載入器的標準會出來的。你到時候怎麼看 Webpack 都彆扭。
- 在想得狠一點,前端很多東西發展到現在,都違背初衷、過早優化、過度設計了。
模組化:檔案劃分模組-> 名稱空間 -> AMD -> CommonJS -> UMD -> …… (問題越來越多) 載入器:script src -> load script -> requirejs -> browserify -> webpack -> hot module replacement -> …… (開發是爽是爽了,執行和除錯可不見得)
你們都看不到弊端是吧?
你也可以只思考一個問題:
現在的 HTML 、 CSS 和 JS ,真的沒辦法直接用了?(大型專案裡)用起來真的那麼難用?非要轉譯。
你加上這些工具和轉譯後,就沒有後果?
相關文章
- Webpack + gulp + babel-loader 配置踩坑WebBabel
- 【優雅寫程式碼系統】springboot+mybatis+pagehelper+mybatisplus+druid教你如何優雅寫程式碼Spring BootMyBatisUI
- 優雅地除錯線上程式碼除錯
- 如何寫出優雅的程式碼?
- 寫出優雅的js程式碼JS
- 如何優雅地管理複雜前端程式碼前端
- 編寫更優雅的 JavaScript 程式碼JavaScript
- 如何用 SpringBoot 優雅的寫程式碼Spring Boot
- 如何優雅地寫註釋:找到程式碼註釋的黃金平衡點
- 如何提高Java程式碼質量-優雅的寫程式碼Java
- 如何寫出優雅耐看的JavaScript程式碼JavaScript
- 編寫優雅程式碼的最佳實踐
- 優雅地減少redux請求樣板程式碼Redux
- 利用babel(AST)優雅地解決0.1+0.2!=0.3的問題BabelAST
- PHPer這樣寫程式碼也許更優雅PHP
- golang如何優雅的編寫事務程式碼Golang
- 優雅的程式碼
- 想讓你的程式碼變得更加優雅嗎?
- 你還在手寫TS型別程式碼嗎型別
- 我是如何將業務程式碼寫優雅的
- 30個python教你學會優雅的寫程式碼Python
- 如何優雅地改善程式中for迴圈
- 使用go優雅地撰寫單元測試Go
- 教你更優雅地寫 API 之「列舉使用」API
- 【webpack進階】使用babel避免webpack編譯執行時模組依賴WebBabel編譯
- 助您寫出優雅的Java程式碼七點建議Java
- 如何用 es6+ 寫出優雅的 js 程式碼JS
- 看promise教你如何優雅的寫js非同步程式碼PromiseJS非同步
- Webpack4+Babel7優化70%速度WebBabel優化
- 如何優雅地求和?
- 教你更優雅地寫 API 之「靈活地任務排程」API
- 教你更優雅地寫 API 之「記錄日誌」API
- webpack – babel 篇WebBabel
- webpack - babel 篇WebBabel
- Guava - 拯救垃圾程式碼,寫出優雅高效,效率提升N倍Guava
- 如何優雅地讀寫HttpServletRequest和HttpServletResponse的請求體HTTPServlet
- 如何優雅地使用 macOSMac
- 透過 VS Code 優雅地編輯 Pod 內的程式碼(非 NodePort)
- gomock: 不依賴interface{}的stuct method mockGoMock