摘要:我們通過配置一些風(fēng)格,讓來強(qiáng)制提醒我們代碼的風(fēng)格是否符合規(guī)范,所以就是很好的選擇,但是還需要和的結(jié)合來使用。非派生類的構(gòu)造函數(shù)不能調(diào)用。
JavaScript的編程風(fēng)格
在前端工程愈演愈大的情況下,JavaScript占的比例也很足,需要良好的書寫風(fēng)格,才能在多人協(xié)作code時(shí)提高效率,何況代碼還是需要人來讀的,所以可讀性、可維護(hù)性高的代碼很多時(shí)候有重要意義。
這里推薦下Airbnb的掛在github上的JavaScript編寫風(fēng)格:https://github.com/libertyAlo... 有時(shí)間的話,還是希望可以多看看。
eslint即使我們看了無數(shù)遍上面說到的Airbnb的JavaScript的編程風(fēng)格,但是,不少情況下還是會(huì)寫出不符合要求的代碼,那么就需要工具來約束我們。我們通過配置一些風(fēng)格,讓IDE來強(qiáng)制提醒我們代碼的風(fēng)格是否符合規(guī)范,所以eslint就是很好的選擇,但是eslint還需要和IDE的結(jié)合來使用。
eslint的使用eslint是一個(gè)node的包,需要類似npm、yarm來安裝,也和其他的第三方包一樣,可以全局安裝,也可以本地安裝,建議這個(gè)全局安裝,因?yàn)檫@個(gè)包很多時(shí)候并不是供編程人員直接使用,而是配合ide或者編輯器來進(jìn)行使用的,所以全局安裝后,可以本地生成配置文件,通過和IDE的配合來起到檢測書寫風(fēng)格的效果。
npm install -g eslint
可以安裝最新版本,安裝好了,考慮哪些工程需要使用eslint來檢測,哪些不需要,還有哪些文件需要,哪些文件不需要,甚至文件夾是否需要,在需要的工程根目錄下執(zhí)行
eslint --init
需要配置,可以選擇一個(gè)流行的風(fēng)格,Airbnb或者標(biāo)準(zhǔn),生成JSON文件,.eslintrc.json這個(gè)配置文件,
需要注意,win10在git ui的命令窗口執(zhí)行的話無法使用箭頭按鍵來選擇,所以最好還是使用win自帶的cmd窗口
這里就可以修改這個(gè)json文件,來配置你熟悉的,覺得合理的規(guī)則,以及排除的文件,
{ "rules": { "no-console": 2, // 禁用 console "no-alert": 2, // 禁用 alert "no-irregular-whitespace": 2, //禁止tab、空格之外的非法空白 "no-unexpected-multiline": 2, //禁止使用令人困惑的多行表達(dá)式,一行結(jié)束最后使用;或者是- +之類的連接符 "guard-for-in": 2, // for in 循環(huán)必須限制 Object.prototype.hasOwnProperty "no-caller": 2, //禁用 arguments.caller 或 arguments.callee "no-extend-native": 2, //禁止擴(kuò)展原生對象 "no-extra-bind": 2, //禁止不必要的函數(shù)綁定 函數(shù)中沒有使用this時(shí),不需要綁定this "no-invalid-this": 1, // 控制this的使用,只能在構(gòu)造函數(shù)【首字母大寫】、對象、類中使用 "no-multi-spaces": [2, {"ignoreEOLComments": true}], //禁止非縮進(jìn)處出現(xiàn)多個(gè)空格 ,但忽略行尾注釋前的多個(gè)空格 let a = b; b前空格多了 "no-multi-str": 2, //禁止多行字符串 可以連接多行字符實(shí)現(xiàn)換行,建議使用 " " +的組合 "no-new-wrappers": 2, //禁止原始包裝實(shí)例 new String new Number的操作不合理,會(huì)變成初始化一個(gè)對象,而不是對應(yīng)的初始類型 "no-throw-literal": 2, //限制可以被拋出的異常 僅僅 拋出(throw) Error 對象本身或者用戶自定義的以 Error 對象為基礎(chǔ)的異常 "no-with": 2, //不使用with "no-unused-vars": [2, {"args": "none"}], // 未使用的變量定義,參數(shù)不校驗(yàn),參數(shù)有可能是可選參數(shù) "array-bracket-spacing": [2, "never"], //禁止或強(qiáng)制在括號內(nèi)使用空格, 禁止使用不一致的空格,應(yīng)該遵守格式 [1, 2, 3],也就是,逗號后面一個(gè)空格 "brace-style": 2, //大括號風(fēng)格要求 one true brace style 風(fēng)格如下: /* if (foo) { bar(); } else { baz(); } */ "camelcase": [1, {"properties": "never"}], // 駝峰變量命名,警告,而且屬性名不會(huì)要求是駝峰,變量名要求是 "comma-dangle": [2], //禁止在數(shù)組、對象、函數(shù)參數(shù)最后面添加拖尾逗號 "comma-spacing": 2, // 逗號后非行尾需要加空格 "comma-style": 2, //要求逗號放在數(shù)組元素、對象屬性或變量聲明之后,且在同一行 "computed-property-spacing": 2, //禁止在計(jì)算屬性中使用空格 obj[key] ok "eol-last": 2, //要求在非空文件末尾至少存在一行空行 "func-call-spacing": 2, // 函數(shù)執(zhí)行需要緊挨著(括號,alert(1) ok 不要alert (2) "jsx-quotes": 2, //強(qiáng)制所有不包含雙引號的 JSX 屬性值使用雙引號 "key-spacing": 2, // 對象key之后,冒號前不允許有空格; value前需要有空格 "keyword-spacing": 0, //要求在關(guān)鍵字之前、之后都至少有一個(gè)空格 "linebreak-style": 2, //強(qiáng)制使用 Unix 換行符: "new-cap": 2, //要求構(gòu)造函數(shù)首字母大寫 "newline-after-var": 1, // 變量定義后增加空行 warn "no-array-constructor": 2, // new Array X 禁用 Array 構(gòu)造函數(shù) "no-mixed-spaces-and-tabs": 2, // 禁止混用tab與空格 禁止空格和 tab 的混合縮進(jìn) "no-multiple-empty-lines": [2, {"max": 2}], // 不能有多個(gè)空行,最多兩行 "no-new-object": 2, //禁用 Object 的構(gòu)造函數(shù) "no-trailing-spaces": 2, // 行尾不留空格 "object-curly-spacing": 2, //不允許花括號中有空格 "one-var-declaration-per-line": 2, // 一個(gè)var定義多個(gè)變量時(shí)每個(gè)變量必須換行 "padded-blocks": [2, "never"], // 其中一條:{}內(nèi)第一行與最后一行不允許有空行 "quote-props": [2, "consistent"], //對象的屬性名需要統(tǒng)一【 雙引號、單引號、不加】三個(gè)選一 "quotes": [2, "single", {"allowTemplateLiterals": true}], "semi-spacing": 2, // 分號前不加空格 "semi": 2, // 該有分號的地方都加分號 // "sort-keys": 1, //對象的鍵名需要按照字典序排序 // "sort-vars": 1, //變量定義按照字典序排序 "space-before-blocks": 2, // {} 前必須有空格,例如 function() {} "space-before-function-paren": [2, "never"], // function 參數(shù)前不允許有空格 "spaced-comment": [2, "always"], // 注釋后面//后需要增加空格 "arrow-parens": [2, "always"], // 要求箭頭函數(shù)的參數(shù)使用圓括號 "constructor-super": 2, // 派生類中的構(gòu)造函數(shù)必須調(diào)用 super()。非派生類的構(gòu)造函數(shù)不能調(diào)用 super()。[字面量繼承其他類的類就是派生類] "generator-star-spacing": [2, "after"], // 約束 generator 函數(shù)強(qiáng)制在 * 和函數(shù)名之間有空格 "no-new-symbol": 2, // disallow new operators with the Symbol object 不要new symbol "no-this-before-super": 2, // 禁止在構(gòu)造函數(shù)中,在調(diào)用 super() 之前使用 this 或 super //"no-var": 1, // 要求使用 let 或 const 而不是 var //"prefer-rest-params": 1, // require rest parameters instead of arguments "prefer-spread": 2, // 要求使用擴(kuò)展運(yùn)算符而非 .apply() ,參數(shù)在一個(gè)數(shù)組中時(shí) "rest-spread-spacing": 2, // rest參數(shù)、擴(kuò)展運(yùn)算符 和其對應(yīng)的表達(dá)式都不能有空格 ...args "yield-star-spacing": [2, "after"], // 強(qiáng)制在 * 和 參數(shù)之間有空格 yield* other(); "no-debugger": "error", // 禁用 debugger "no-sequences": "error", // 禁用逗號操作符 "no-dupe-args": "error", // 禁止 function 定義中出現(xiàn)重名參數(shù) "no-inner-declarations": "error", // 禁止在嵌套的塊中出現(xiàn) function 聲明 ;if等塊中聲明函數(shù) "no-unreachable": "error", // 禁止在return、throw、continue 和 break 語句之后出現(xiàn)不可達(dá)代碼 "no-octal": "error", // 禁用八進(jìn)制字面量 0開頭的數(shù)字 "no-dupe-keys": "error", // 禁止對象字面量中出現(xiàn)重復(fù)的 key "block-scoped-var": 2, // if,for內(nèi)無var定義,可以用let // 強(qiáng)制把變量的使用限制在其定義的作用域范圍內(nèi) "indent": [2, 4, { "SwitchCase": 1 }], // 統(tǒng)一縮進(jìn)4字符,switch case需要縮進(jìn) "max-nested-callbacks": [2, 5], // 強(qiáng)制回調(diào)函數(shù)最大嵌套深度 5層 } }
可能還需要一個(gè)排除檢測文件,和.eslintrc.json同級的目錄下面新建一個(gè)文件,名字為: .eslintignore
下面是element ui的排除文件
src/utils/popper.js src/utils/date.js *.sh node_modules lib coverage
很多時(shí)候其實(shí)我們的工程都是在已有的基礎(chǔ)上進(jìn)行改進(jìn)的,所以我們可能只是在新增加的代碼上面進(jìn)行eslint校驗(yàn)就好:那么就需要.eslintignore的書寫只包含某個(gè)文件夾
/* !/src /src/* !/src/page /src/page/* !/src/page/flist
上面就是只檢查.eslintignore同級下的src/page/flist這個(gè)文件夾。這個(gè).eslintignore和gitignore是一樣的規(guī)則,
gitignore規(guī)則描述
到這里其實(shí)還是差一些,安裝了這個(gè)eslint的包,生產(chǎn)了配置文件,還需要ide揮著編輯器的配合,所以本文說的是vscode。
vscode是一個(gè)微軟開源的編輯器,很多插件可以輔助,這個(gè)eslint就是一個(gè)插件,安裝eslint插件,安裝插件后,會(huì)檢測打開的工程是否存在一個(gè)eslint的配置文件,存在的話就會(huì)執(zhí)行eslint的檢測,不存在的話就不會(huì)檢測。
react+eslint有個(gè)問題,react的組件引入時(shí)會(huì)被認(rèn)為沒有被使用no-unused-vars,需要引入react插件,引入規(guī)則"react/jsx-uses-vars": 2
對于react的使用,一些無狀態(tài)的組件雖然沒有顯示的調(diào)用react,但是編譯后會(huì)使用React.createElement來構(gòu)造組件,所以還是會(huì)出現(xiàn)react沒有被使用no-unused-vars,只能通過注釋來消除
/* eslint-disable */ 整個(gè)下面塊不檢查 // eslint-disable-next-line 下一行不檢查 import React, {Component} from "react"; // eslint-disable-line 本行不檢查
完整的編寫:
{ "env": { "browser": true, "commonjs": true, "es6": true }, "extends": "eslint:recommended", "parserOptions": { "ecmaFeatures": { "experimentalObjectRestSpread": true, "jsx": true }, "sourceType": "module" }, "plugins": [ "react" ], "rules": { "no-cond-assign": 0, "no-console": 2, "no-alert": 2, "no-irregular-whitespace": 2, "no-unexpected-multiline": 2, "guard-for-in": 2, "no-caller": 2, "no-extend-native": 2, "no-extra-bind": 2, "no-invalid-this": 1, "no-multi-spaces": 2, "no-multi-str": 2, "no-new-wrappers": 2, "no-throw-literal": 2, "no-with": 2, "no-unused-vars": [2, {"args": "none"}], "react/jsx-uses-vars": 2, "array-bracket-spacing": [2, "never"], "brace-style": 2, "comma-dangle": [2], "comma-spacing": 2, "comma-style": 2, "computed-property-spacing": 2, "func-call-spacing": 2, "jsx-quotes": 2, "key-spacing": 2, "keyword-spacing": 0, "linebreak-style": 2, "new-cap": 2, "no-array-constructor": 2, "no-mixed-spaces-and-tabs": 2, "no-multiple-empty-lines": [2, {"max": 2}], "no-new-object": 2, "no-tabs": 0, "no-trailing-spaces": 2, "object-curly-spacing": 2, "padded-blocks": [2, "never"], "quote-props": [2, "consistent"], "quotes": [2, "single", {"allowTemplateLiterals": true}], "semi-spacing": 2, "semi": 2, "space-before-blocks": 2, "space-before-function-paren": [2, "never"], "spaced-comment": [2, "always"], "constructor-super": 2, "generator-star-spacing": [2, "after"], "no-new-symbol": 2, "no-this-before-super": 2, "no-var": 1, "prefer-rest-params": 1, "prefer-spread": 2, "rest-spread-spacing": 2, "yield-star-spacing": [2, "after"], "no-debugger": "error", "no-sequences": "error", "no-dupe-args": "error", "no-inner-declarations": "error", "no-unreachable": "error", "no-octal": "error", "no-dupe-keys": "error", "block-scoped-var": 2, "indent": [2, 4, { "SwitchCase": 1 }], "max-nested-callbacks": [2, 5] } }
使用vscode的時(shí)候,有的時(shí)候使用腳手架生成的代碼縮進(jìn)會(huì)是2個(gè)空格,大部分時(shí)間我們可能需要4個(gè)空格,所以在首選項(xiàng)里面可以設(shè)置,不檢查代碼的縮進(jìn),不管什么情況都是用4空格縮進(jìn),"editor.tabSize": 4,"editor.detectIndentation": false
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/88849.html
摘要:自動(dòng)化接入和升級方案通過命令行工具提供一鍵接入升級能力,同時(shí)集成到團(tuán)隊(duì)腳手架中,大大降低了工程接入和維護(hù)的成本。原始代碼經(jīng)過解析器的解析,在管道中逐一經(jīng)過所有規(guī)則的檢查,最終檢測出所有不符合規(guī)范的代碼,并輸出為報(bào)告。 引言 代碼規(guī)范是軟件開發(fā)領(lǐng)域經(jīng)久不衰的話題,幾乎所有工程師在開發(fā)過程中都會(huì)遇到,并或多或少會(huì)思考過這一問題。隨著前端應(yīng)用的大型化和復(fù)雜化,越來越多的前端工程師和團(tuán)隊(duì)開始重...
摘要:初始命令初始命令如下生成文件自動(dòng)修復(fù)錯(cuò)誤。第一個(gè)是錯(cuò)誤級別關(guān)閉規(guī)則將規(guī)則視為一個(gè)警告不會(huì)影響退出碼將規(guī)則視為一個(gè)錯(cuò)誤退出碼為可以從基礎(chǔ)配置中繼承已啟用的規(guī)則。一旦發(fā)現(xiàn)配置文件中有,它就會(huì)停止在父級目錄中尋找。 1、初始命令 eslint初始命令如下: (1) eslint --init: 生成.eslintrc.js文件(2) eslint src --fix: 自動(dòng)修復(fù)錯(cuò)誤。但是只能...
摘要:微豆一個(gè)使用與重構(gòu)豆瓣的項(xiàng)目。在中的配置代理重新啟動(dòng),打開查看結(jié)果是否與直接請求豆瓣相同。更多請參考豆瓣電影文檔。它采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測的方式發(fā)生變化。 微豆 Vdo 一個(gè)使用 Vue.js 與 Material Design 重構(gòu) 豆瓣 的項(xiàng)目。 項(xiàng)目網(wǎng)站 http://vdo.ralfz.com/ GitHub https:...
摘要:例如在中加入配置塊進(jìn)行配置例如,直接在代碼文件中以注釋的方式定義需要注意的是,代碼文件內(nèi)以注釋配置的規(guī)則會(huì)覆蓋配置文件里的規(guī)則,即優(yōu)先級要更高。 在 Vue-cli 創(chuàng)建的項(xiàng)目中,使用了 ESLint 規(guī)范代碼的項(xiàng)目中如何針對單個(gè)js文件禁用ESLint語法校驗(yàn),但整個(gè)項(xiàng)目依然保留 ESLint 的校驗(yàn)規(guī)則? 在代碼頂部添加一行注釋 /eslint-disable/ (兩個(gè)/中間有兩...
摘要:本文首發(fā)于的技術(shù)博客實(shí)用至上,非經(jīng)作者同意,請勿轉(zhuǎn)載。如果你使用了,或類似的,那么,通過編譯前后的代碼相差就很大了,這會(huì)造成兩個(gè)問題以為例把你的代碼轉(zhuǎn)成什么樣你自己是無法控制的,這往往導(dǎo)致無法通過的審查。 本文首發(fā)于Array_Huang的技術(shù)博客——實(shí)用至上,非經(jīng)作者同意,請勿轉(zhuǎn)載。原文地址:https://segmentfault.com/a/1190000007030775如果您...
閱讀 2351·2021-11-25 09:43
閱讀 2864·2021-11-24 09:39
閱讀 2926·2019-08-30 11:10
閱讀 1130·2019-08-29 16:34
閱讀 595·2019-08-29 13:25
閱讀 3358·2019-08-29 11:21
閱讀 2861·2019-08-26 11:39
閱讀 2394·2019-08-26 11:34