近日,來自Facebook的開發(fā)者Juriy Zaytsev發(fā)布文章稱,他們更換了CSS Linter工具,采用了基于PostCSS的Stylelint作為新的Linter工具,以期保證CSS代碼質(zhì)量。
上千名工程師,多條不同產(chǎn)品線,龐大代碼庫,日漸增加的新特性……種種特點加在一起,給Facebook的代碼質(zhì)量管理帶來了獨特的挑戰(zhàn)。而如何保證上千份不停變換的CSS文件質(zhì)量,對于Facebook來說,也是非常頭疼的問題。Facebook為了解決這個問題,采用了Code Review、代碼樣式規(guī)范、重構(gòu)以及自建的CSS Linter等手段。
然而,F(xiàn)acebook對之前自建的CSS Linter并不滿意。該Linter是基于正則表達式來對CSS進行約束的,因此,所設(shè)定的每一個檢測規(guī)則都需再去設(shè)定相應(yīng)的匹配規(guī)則,并且要去遍歷整個文件進行檢測,這不僅難以維護,而且性能很差。
CSS本身是一門語言,把它當做純文本文件,采用正則表達式來處理并不是一個好選擇。而換種思路,采用抽象語法樹的方式來構(gòu)建一個解析器,則會在性能上有比較不錯的提升。
此時,基于PostCSS的Stylelint走進了Facebook的視野。Stylelint提供了完整的抽象語法樹的訪問方式,因此,使用者可以快速訪問具體的代碼節(jié)點、傳入一些基本函數(shù)。這可以大大增強檢測規(guī)則可讀性和可維護性,正是Facebook所想要的。
Facebook理所當然地選擇了Stylelint,并在具體的使用過程中對Stylelint進行了完善,針對舊Linter的痛點添加了功能。
selector-class-pattern。Stylelint還可以添加自定義規(guī)則,具體的添加方法可以參考built-in plugin mechanism。同時,F(xiàn)acebook也為Stylelint貢獻了一些規(guī)則和插件。
Stylelint尚有不完善的地方,例如沒有提供自動格式化與修正功能,而人工修正會浪費開發(fā)者大量的時間。因此,F(xiàn)acebook正著手為其添加自動格式化與修正功能,這將為Stylelint用戶帶來極大的便利。
同時,F(xiàn)acebook選擇了Jest框架進行單元測試,來檢測當前所處的環(huán)境是否是CSS文件。
Juriy Zaytsev提到,換一個靠譜的CSS Linter工具只是保證高質(zhì)量的CSS的代碼的第一步,F(xiàn)acebook還打算添加更多的自定義的規(guī)則,設(shè)法達到使用規(guī)則的最佳實踐以及制定統(tǒng)一的代碼規(guī)范。
本文永久更新鏈接地址:http://www.linuxidc.com/Linux/2016-06/132592.htm