摘要:前言人是很懶惰的,你剛開始建立的一個規(guī)規(guī)整整的項目,可能一段時間過后,就回被你無數(shù)次的提交代碼弄得凌亂不堪。
前言
人是很懶惰的,你剛開始建立的一個規(guī)規(guī)整整的項目,可能一段時間過后,就回被你無數(shù)次的提交代碼弄得凌亂不堪。
就算你能保證你的編碼風格嚴謹統(tǒng)一,別人又該如何,每個人都有不一樣的編碼風格,要保持統(tǒng)一,就要對項目進行適當?shù)墓芾?/p>
正文
接下來介紹個React項目簡單管理的一個實踐:
一、Eslinteslint可以幫我們校驗代碼,給整個項目的代碼定義一個規(guī)范,我們寫的代碼必須按照這個規(guī)范寫,否則在校驗階段會報錯
這就是強迫癥患者的福利了,強迫自己把eslint報的error全部處理掉,不久之后既可以養(yǎng)成良好的編碼習慣了
1.安裝
npm install eslint babel-eslint --save-dev
也可以全局安裝,這樣的話eslint命令適用于你的所有項目
npm install eslint -g
2.配置方法
可以運行eslint --init,按照指示一步步配置
也可以直接在根目錄新增一個.eslintrc文件進行配置
3.規(guī)范定義
可以是你自己定義的一套規(guī)范,比如:字符創(chuàng)使用單引號,縮進為2個空格等等
也可以安裝一個成熟的規(guī)范,然后再配置文件中指定使用這個規(guī)范
比如:Airbnb的編碼規(guī)范是在業(yè)界非常流行的一套規(guī)范,我們可以試試
首先安裝 eslint-config-airbnb-base
npx install-peerdeps --save-dev eslint-config-airbnb-base
然后在.eslintrc中配置
{ "extends": ["airbnb-base"], "parser": "babel-eslint", "rules": { "indent": ["error", 2] } }
rules: 可以在這里覆蓋Airbnb的規(guī)則,具體的規(guī)則定義參照 eslint rules
Airbnb具體的規(guī)則可以參考
Airbnb React編碼規(guī)范
PS:
其實一開始不要麻煩,耐心地跟著這套規(guī)范走,不久之后你的編碼習慣就會跟Airbnb基本一致了
4.針對react
由于react的組件文件中,有很多違反eslint規(guī)范的地方,比如jsx語法,還有頭部import的React庫
如果不做特殊處理,都是會報錯的
所以有了一個針對react的插件:
npm install --save-dev eslint-plugin-react
這個插件可以檢查react的jsx語法,jsx文件的縮進問題和部分語法問題
插件的配置還是在.eslintrc
{ "parserOptions": { "ecmaFeatures": { "jsx": true } } "plugins": [ "react" ], "rules": { "react/jsx-uses-vars": 1, "react/jsx-uses-react": 1 } }
5.完整的配置文件
{ "extends": ["airbnb-base"], "parser": "babel-eslint", "parserOptions": { "sourceType": "module", "ecmaFeatures": { "jsx": true } }, "rules": { "react/jsx-uses-vars": 1, "react/jsx-uses-react": 1, "no-tabs": 0, "class-methods-use-this": 0, "import/no-unresolved": 0, "indent": 0, "comma-dangle": 0, "import/prefer-default-export": 0 }, "plugins": [ "react" ], "globals": { "document": true, "navigator": true, "window":true, "node":true }, "settings": { "import/resolver": { "node": { "extensions": [".js",".jsx"] } } } }
說明:
globals:配置全局變量如window,document等,沒有配置直接使用的話,不能通過eslint的檢查
settings.import/resolver.node.extensions: 可以讓你在import指定后綴的文件的時候,不用寫后綴名,如
import Banner from "./Banner"
PS: 有一些配置可以不用糾結(jié),莫名其妙報錯的話,你可以直接在rules里面覆蓋該配置,像這里的comma-dangle,一直給我報錯,直接被我覆蓋掉了
6.運行
這里有個小坑,如果你是全局安裝的eslint,你用到的插件也要全局安裝,不然eslint找不到插件會報錯
由于我沒有全局安裝eslint
命令行運行:
./node_modules/.bin/eslint --fix --ext .js --ext .jsx src
--ext后面接要檢查文件的后綴,最后一個參數(shù)為src,表示只檢查src文件夾下的js,jsx文件
但是一般不會直接在命令行運行eslint,可以配合npm 的scripts 或者 pre-commit,后面會說
prettier是一個javascript的格式化工具,可以完全統(tǒng)一整個團隊的代碼風格
執(zhí)行一行命令,即可全局格式化代碼,并統(tǒng)一風格
eslint有一個支持和prettier一起使用的插件:eslint-plugin-prettier
但是由于我的eslint使用的是Airbnb的規(guī)范,可能與prettier有很多沖突的配置,而且這些配置我們都不可知,
所以這個介紹多帶帶使用prettier
1.安裝
npm install --save-dev prettier
2.配置和規(guī)范
根目錄下新建 .prettierrc 文件
比如我的配置如下
{ "printWidth": 80, //一行的字符數(shù),如果超過會進行換行,默認為80 "tabWidth": 2, //一個tab代表幾個空格數(shù),默認為80 "useTabs": false, //是否使用tab進行縮進,默認為false,表示用空格進行縮減 "singleQuote": false, //字符串是否使用單引號,默認為false,使用雙引號 "semi": true, //行位是否使用分號,默認為true "trailingComma": "none", //是否使用尾逗號,有三個可選值"" "bracketSpacing": true, //對象大括號直接是否有空格,默認為true,效果:{ foo: bar } "parser": "babylon" //代碼的解析引擎,默認為babylon,與babel相同。 }
更多配置規(guī)則:prettier配置規(guī)則
3.配合onchange
可實現(xiàn)在本地開發(fā)的時候,保存即格式化
首先安裝 onchange
npm install --save-dev onchange
定義npm的scripts如下
{ "scripts": { "dev": "webpack-dev-server & npm run format", "format": "onchange "src/**/*.js" "src/**/*.jsx" "src/**/*.scss" -- prettier --write {{changed}}" } }
用onchange監(jiān)聽src下js,jsx和scss后綴的文件,一旦發(fā)生改變,執(zhí)行 prettier 命令,用--write打印出所修改文件的文件名{{change}}
然后在啟動本地服務(wù)的同時,run format,啟動onchange的監(jiān)聽
pre-commit鉤子可以在 git commits 之前運行一段腳本
比如在commit代碼之前運行eslint,校驗失敗則代碼提交失敗,校驗成功則允許提交代碼
1.安裝
npm install --save-dev pre-commit
2.npm scripts配置
{ "scripts": { "dev": "webpack-dev-server & npm run format", "format": "onchange "src/**/*.js" "src/**/*.jsx" "src/**/*.scss" -- prettier --write {{changed}}", "precommit-msg": "echo "Pre-commit checks........." && exit 0", "lint": "eslint --ext .js --ext .jsx src" }, "pre-commit": ["precommit-msg", "lint"] }
用pre-commit定義commit之前,執(zhí)行兩條命令
precommit-msg:輸出一些信息避免信息混淆
lint:使用eslint校驗代碼
這時候你在終端git add 然后git commit的時候,就回啟動eslint校驗,不通過校驗無法提交成功
建議eslint校驗不通過的代碼自己查復(fù),有助于養(yǎng)成良好的編碼習慣
不久以后,你執(zhí)行eslint就再也沒有報錯了,吊炸天啦?。?/p>
demo地址:https://github.com/shinyshine...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/96534.html
摘要:對于項目的編碼規(guī)范而言,主要有兩種選擇和。此外由于性能問題,官方?jīng)Q定全面采用,甚至把倉庫作為測試平臺,而的解析器也成為獨立項目,專注解決雙方兼容性問題。最近在我的項目的編碼規(guī)范中全量的用代替了針對其中遇到的問題做一個記錄。 ??對于Typescript項目的編碼規(guī)范而言,主要有兩種選擇ESLint和TSLint。ESLint不僅能規(guī)范js代碼,通過配置解析器,也能規(guī)范TS代碼。此外由...
摘要:對于項目的編碼規(guī)范而言,主要有兩種選擇和。此外由于性能問題,官方?jīng)Q定全面采用,甚至把倉庫作為測試平臺,而的解析器也成為獨立項目,專注解決雙方兼容性問題。最近在我的項目的編碼規(guī)范中全量的用代替了針對其中遇到的問題做一個記錄。 ??對于Typescript項目的編碼規(guī)范而言,主要有兩種選擇ESLint和TSLint。ESLint不僅能規(guī)范js代碼,通過配置解析器,也能規(guī)范TS代碼。此外由...
摘要:對于項目的編碼規(guī)范而言,主要有兩種選擇和。此外由于性能問題,官方?jīng)Q定全面采用,甚至把倉庫作為測試平臺,而的解析器也成為獨立項目,專注解決雙方兼容性問題。最近在我的項目的編碼規(guī)范中全量的用代替了針對其中遇到的問題做一個記錄。 ??對于Typescript項目的編碼規(guī)范而言,主要有兩種選擇ESLint和TSLint。ESLint不僅能規(guī)范js代碼,通過配置解析器,也能規(guī)范TS代碼。此外由...
摘要:打造個人團隊適用的開源項目規(guī)范是一個用來優(yōu)化托管在上的多代碼庫的工作流的一個管理工具可以讓你在主項目下管理多個子項目,從而解決了多個包互相依賴,且發(fā)布時需要手動維護多個包的問題。 打造個人or團隊適用的開源項目規(guī)范 lerna Lerna 是一個用來優(yōu)化托管在gitnpm上的多package代碼庫的工作流的一個管理工具,可以讓你在主項目下管理多個子項目,從而解決了多個包互相依賴,且發(fā)布...
閱讀 2771·2019-08-30 15:53
閱讀 538·2019-08-29 17:22
閱讀 1088·2019-08-29 13:10
閱讀 2334·2019-08-26 13:45
閱讀 2765·2019-08-26 10:46
閱讀 3213·2019-08-26 10:45
閱讀 2519·2019-08-26 10:14
閱讀 479·2019-08-23 18:23