摘要:空格空格設(shè)置路徑格式化操作時(shí),會(huì)自動(dòng)在比如方法的右括號(hào)前,賦值語(yǔ)句的等號(hào)兩側(cè)等等這些位置自動(dòng)加上一個(gè)空格,如果我們寫(xiě)代碼時(shí)漏掉這些空格時(shí)。這樣,就方便我對(duì)別人的代碼也直接通過(guò)格式化操作來(lái)自動(dòng)進(jìn)行風(fēng)格規(guī)范處理。
在開(kāi)始講 Angular 各個(gè)核心知識(shí)點(diǎn)之前,想先來(lái)講講開(kāi)發(fā)工具 WebStorm 的一些配置以及相應(yīng)配置文件如 tslint.json 的配置。
因?yàn)槲覀€(gè)人比較注重代碼規(guī)范、代碼風(fēng)格,而對(duì)于這些規(guī)范,我只有一個(gè)觀點(diǎn):一切需要依賴(lài)開(kāi)發(fā)人員的主觀意識(shí)去遵守的規(guī)范都沒(méi)有多大意義。
以前做 Android 開(kāi)發(fā)時(shí)會(huì)借助 AndroidStudio 來(lái)強(qiáng)制遵守一些規(guī)范,現(xiàn)在前端項(xiàng)目我用的是 WebStorm 開(kāi)發(fā),這兩個(gè)開(kāi)發(fā)工具本質(zhì)上同源,所以很多功能都差不多。
那么,這篇就來(lái)講一講,如何對(duì) WebStorm 進(jìn)行一些設(shè)置,讓它可以更好的輔助我們遵守風(fēng)格規(guī)范,同時(shí),理清一些比如 tslint.json 的配置,來(lái)讓開(kāi)發(fā)工具實(shí)時(shí)檢測(cè)我們寫(xiě)的代碼是否有很好的遵守規(guī)范。
Angular 項(xiàng)目的很多文件都是通過(guò) Angular-CLI 工具的 ng 命令來(lái)生成的,生成時(shí)就有默認(rèn)一些代碼風(fēng)格,而且,WebStorm 默認(rèn)也有一些代碼風(fēng)格,也許有人覺(jué)得直接使用默認(rèn)的風(fēng)格來(lái)即可。
但對(duì)于默認(rèn)的一些風(fēng)格規(guī)范,我不是很贊同,比如說(shuō):
name: string = dasu
簡(jiǎn)單的在某個(gè)類(lèi)中聲明這么一個(gè) name 變量,類(lèi)型是 string,初始值為 dasu,但默認(rèn)的 tslint.json 配置的代碼風(fēng)格會(huì)報(bào)錯(cuò),因?yàn)樗ㄗh我們,既然已經(jīng)初始化為字符串類(lèi)型了,就沒(méi)有必要再去聲明變量的類(lèi)型了。
對(duì)于這種默認(rèn)風(fēng)格,我個(gè)人并不贊同,因?yàn)閭€(gè)人習(xí)慣了 Java 的風(fēng)格,對(duì)于變量的類(lèi)型聲明已經(jīng)習(xí)慣了,更何況,這個(gè)初始值有可能在未來(lái)被去掉,那么,這時(shí)候豈不是還要去加上類(lèi)型說(shuō)明?
所以,我個(gè)人還是比較習(xí)慣聲明變量的類(lèi)型,不管有沒(méi)有對(duì)其進(jìn)行初始化。
以上只是個(gè)簡(jiǎn)單的例子,默認(rèn)的一些代碼風(fēng)格,我個(gè)人都不是很習(xí)慣,所以,下面列舉我的個(gè)人代碼風(fēng)格,供大伙借鑒、參考。
不多,只有幾點(diǎn)而已,因?yàn)榇蠖嘀苯邮褂媚J(rèn)的代碼風(fēng)格,只是默認(rèn)的一些風(fēng)格中,我不是很習(xí)慣的情況下,才會(huì)對(duì)其進(jìn)行修改。
_
一個(gè)下劃線(xiàn)開(kāi)頭,并添加 private
修飾符on
為前綴on
為前綴*ngFor="let item of page?.result"
這樣便于各個(gè)頁(yè)面的代碼直接復(fù)制粘貼""
雙引號(hào),ts 中使用
單引號(hào)創(chuàng)建一個(gè)新的 Angular 項(xiàng)目時(shí),會(huì)自動(dòng)生成項(xiàng)目的腳手架,里面包括了各種各樣的文件,其中有一份是 tslint.json 文件,是用來(lái)給 WebStorm 實(shí)時(shí)對(duì)代碼進(jìn)行 lint 檢測(cè)時(shí)的代碼風(fēng)格配置。
我修改了部分默認(rèn)的配置,下面給出的是所有項(xiàng)的配置,其中帶有注釋的配置項(xiàng),就是我增加或修改原本默認(rèn)的配置項(xiàng),是基于我上面說(shuō)的個(gè)人的一些習(xí)慣風(fēng)格而進(jìn)行的修改:
"rules": {
"arrow-return-shorthand": true,
"adjacent-overload-signatures": true, // override 函數(shù)是否集中放置 (新增)
"callable-types": true,
"class-name": true,
"comment-format": [
true,
"check-space"
],
"curly": true,
"deprecation": {
"severity": "warn"
},
"eofline": false, // 文件末尾是否需要空新行 (默認(rèn) true)
"encoding": true, // 文件編碼是否默認(rèn) UTF-8 (新增)
"forin": true,
"import-blacklist": [
true,
"rxjs/Rx"
],
"import-spacing": true,
"indent": [
true,
"spaces"
],
"interface-over-type-literal": true,
"label-position": true,
"max-line-length": [
true,
240 // 默認(rèn)140,我屏幕挺大的,所以并不反感某一行代碼過(guò)長(zhǎng),相反,很多代碼因?yàn)樽詣?dòng)換行后,我個(gè)人感覺(jué)更不習(xí)慣,還不如我手動(dòng)來(lái)選擇從某個(gè)地方換行
],
"member-access": false,
"member-ordering": [
true,
{
"order": [
"static-field",
"instance-field",
"static-method",
"instance-method"
]
}
],
"no-arg": true,
"no-bitwise": true,
"no-console": [
true,
"debug",
"info",
"time",
"timeEnd",
"trace"
],
"no-construct": true,
"no-consecutive-blank-lines": [ // 空白行最多幾行 (新增)
true,
3
],
"no-debugger": false,
"no-duplicate-super": true,
"no-duplicate-switch-case": true, // 是否禁止重復(fù) case (新增)
"no-duplicate-imports": true, // 是否禁止重復(fù) import (新增)
"no-duplicate-variable": [ // 是否禁止重復(fù)變量聲明 (新增)
true,
"check-parameters"
],
"no-conditional-assignment": true, // 禁止在分支條件判斷中有賦值操作 (新增)
"no-empty": false,
"no-empty-interface": true,
"no-eval": true,
"no-inferrable-types": [ // 是否禁止在有初始值的變量聲明上,增加類(lèi)型聲明 (默認(rèn) true)
false,
"ignore-params"
],
"no-mergeable-namespace": true, // 是否禁止重復(fù)的命名空間 (新增)
"no-misused-new": true,
"no-non-null-assertion": true,
"no-shadowed-variable": true,
"no-string-literal": false,
"no-string-throw": true,
"no-switch-case-fall-through": true,
"no-trailing-whitespace": false, // 是否禁止末尾空格 (默認(rèn) true)
"no-unnecessary-initializer": true,
"no-unused-expression": false, // 是否允許無(wú)用的表達(dá)式存在 (默認(rèn) true)
"no-unused-variable": false, // 是否允許無(wú)用的變量存在 (新增)
"no-use-before-declare": true,
"no-unsafe-finally": true,
"no-for-in-array": true,
"no-var-keyword": true,
"object-literal-sort-keys": false,
"one-line": [
true,
"check-open-brace",
"check-catch",
"check-else",
"check-whitespace"
],
"prefer-const": false, // 不強(qiáng)制使用 const,允許使用 let
"quotemark": [ // 引號(hào)設(shè)置,ts 中單引號(hào)
true,
"single",
"jsx-double",
"avoid-escape",
"avoid-template"
],
"radix": true,
"semicolon": [
true,
"always",
"ignore-interfaces"
],
"space-within-parens": [
true,
0
],
"triple-equals": [
true,
"allow-null-check"
],
"typedef-whitespace": [
true,
{
"call-signature": "nospace",
"index-signature": "nospace",
"parameter": "nospace",
"property-declaration": "nospace",
"variable-declaration": "nospace"
}
],
"unified-signatures": true,
"variable-name": false,
"whitespace": [
true,
"check-branch",
"check-decl",
"check-operator",
"check-separator",
"check-type"
],
"no-output-on-prefix": true,
"use-input-property-decorator": true,
"use-output-property-decorator": true,
"use-host-property-decorator": true,
"no-input-rename": true,
"no-output-rename": true,
"use-life-cycle-interface": true,
"use-pipe-transform-interface": true,
"component-class-suffix": true,
"directive-class-suffix": true
}
tslint.json 文件只是用來(lái)在執(zhí)行 ng lint
命令,或者代碼編程過(guò)程中,開(kāi)發(fā)工具實(shí)時(shí)檢測(cè),當(dāng)檢測(cè)到不符合風(fēng)格規(guī)范的代碼時(shí),進(jìn)行報(bào)錯(cuò)處理。
雖然可以在執(zhí)行 ng lint --fix
時(shí)添加 --fix
參數(shù)來(lái)自動(dòng)修正一些風(fēng)格錯(cuò)誤,但這種方式很耗時(shí),而是代碼編寫(xiě)過(guò)程中,也沒(méi)法應(yīng)用。
所以,可以借助 Webstorm 的一些配置,一些小技巧,來(lái)進(jìn)行代碼的格式化操作,讓開(kāi)發(fā)工具自動(dòng)幫我們將代碼整理成符合規(guī)范的風(fēng)格。
下面介紹的這些配置項(xiàng),都是為代碼的格式化操作(快捷鍵:Ctrl + Alt + L
)服務(wù)的,意思也就是說(shuō),當(dāng)我們?yōu)楫?dāng)前文件進(jìn)行代碼格式化操作時(shí),WebStorm 就會(huì)自動(dòng)按照我們的這些配置項(xiàng)來(lái)自動(dòng)整理代碼,將代碼整理成遵循規(guī)范的風(fēng)格。
設(shè)置路徑:Settings -> Editor -> Code Style -> TypeScript -> Punctuation
這里配置項(xiàng)很少,就三個(gè),分別是配置分號(hào),引號(hào)和逗號(hào)。
;
分號(hào),且格式化時(shí)是否對(duì)舊代碼(已經(jīng)過(guò)格式化的代碼)進(jìn)行處理。第二行用來(lái)配置,代碼中是使用 單引號(hào),還是
""
雙引號(hào)(默認(rèn)是雙引號(hào)),且格式化時(shí)是否對(duì)舊代碼(已經(jīng)過(guò)格式化的代碼)進(jìn)行處理。
第三行用來(lái)配置是否需要保留,還是去掉數(shù)組或?qū)ο髮傩粤斜碇?,最后一?xiàng)末尾的逗號(hào)。
我的代碼風(fēng)格是 HTML 中使用 ""
雙引號(hào),TypeScript 中使用 單引號(hào),但使用工具自動(dòng)生成 ts 文件時(shí),引號(hào)默認(rèn)是雙引號(hào),或者某些時(shí)候某些因素下,代碼中出現(xiàn)一些雙引號(hào),這時(shí)候,通過(guò)修改這個(gè)配置,在每次格式化代碼時(shí),就都會(huì)自動(dòng)將雙引號(hào)轉(zhuǎn)成單引號(hào),方便、高效。
設(shè)置路徑:Settings -> Editor -> Code Style -> TypeScript -> Spaces
格式化操作時(shí),會(huì)自動(dòng)在比如方法的 {
右括號(hào)前,賦值語(yǔ)句的 =
等號(hào)兩側(cè)等等這些位置自動(dòng)加上一個(gè)空格,如果我們寫(xiě)代碼時(shí)漏掉這些空格時(shí)。
這個(gè)功能其實(shí)是根據(jù)這里的配置項(xiàng)來(lái)決定的,這里面默認(rèn)勾選了很多,基本符合常見(jiàn)的風(fēng)格規(guī)范:
對(duì)于空格,我沒(méi)有改掉默認(rèn)格式化時(shí)空格風(fēng)格,只是增加了幾種場(chǎng)景也需要自動(dòng)進(jìn)行空格處理,分別是:
導(dǎo)入語(yǔ)句 {}
距離內(nèi)容之間增加一個(gè)空格,默認(rèn)是沒(méi)有的,如:
這兩個(gè)是對(duì)象內(nèi)部的空格處理,默認(rèn)也是沒(méi)有的,如:
設(shè)置路徑:Settings -> Editor -> Code Style -> TypeScript -> Wrapping and Braces
這里是設(shè)置一些對(duì)齊或者換行策略:
上面三個(gè)是用來(lái)設(shè)置方法鏈時(shí),代碼的整理,默認(rèn)不做處理,可以改成格式化時(shí),自動(dòng)將每層的方法調(diào)用進(jìn)行換行,并且對(duì)齊處理,個(gè)人建議。
這個(gè)是設(shè)置,即使 if 代碼塊內(nèi)只有簡(jiǎn)單的一行代碼,也要自動(dòng)為其加上大括號(hào)處理,默認(rèn)是不做處理。
這個(gè)是用來(lái)設(shè)置 ? :
運(yùn)算符的處理,上面的設(shè)置意思是,當(dāng)代碼過(guò)長(zhǎng)時(shí),自動(dòng)將 ?
和 :
的代碼換行,并對(duì)其處理,默認(rèn)是不做處理。
這個(gè)是用來(lái)設(shè)置數(shù)組的處理,以上配置的意思是,當(dāng)數(shù)組過(guò)長(zhǎng)時(shí),自動(dòng)將每一項(xiàng)進(jìn)行換行并對(duì)其處理,[]
多帶帶占據(jù)一行:
[圖片上傳失敗...(image-e2d886-1553268791353)]
對(duì)于 Angular 中的 @NgModel 的文件來(lái)說(shuō),經(jīng)常會(huì)有這種風(fēng)格需要,所以就直接這么配置了。
這個(gè)是用來(lái)設(shè)置變量或者對(duì)象的屬性列表的賦值語(yǔ)句的對(duì)齊模式,如:
同理,也可以設(shè)置 CSS 的樣式屬性的對(duì)齊方式:
以上,只是我的個(gè)人風(fēng)格習(xí)慣,大體上,我都直接按照默認(rèn)的風(fēng)格規(guī)范來(lái)遵守,但在個(gè)把一些項(xiàng)上,個(gè)人有不同的看法和習(xí)慣,所以修改掉了默認(rèn)的風(fēng)格配置。
另外,我比較習(xí)慣使用格式化代碼操作,而且一個(gè)項(xiàng)目中,代碼全是我自己寫(xiě)的可能性也很小,別人寫(xiě)的代碼或多或少都存在一些風(fēng)格規(guī)范問(wèn)題,也沒(méi)辦法強(qiáng)制性要求他人必須遵守,所以,就瞎折騰了下 WebStorm 的相關(guān)配置。
這樣,就方便我對(duì)別人的代碼也直接通過(guò)格式化操作來(lái)自動(dòng)進(jìn)行風(fēng)格規(guī)范處理。
大家好,我是 dasu,歡迎關(guān)注我的公眾號(hào)(dasuAndroidTv),公眾號(hào)中有我的聯(lián)系方式,歡迎有事沒(méi)事來(lái)嘮嗑一下,如果你覺(jué)得本篇內(nèi)容有幫助到你,可以轉(zhuǎn)載但記得要關(guān)注,要標(biāo)明原文哦,謝謝支持~
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/1070.html
摘要:整個(gè)代碼檢查和格式化流程應(yīng)該規(guī)范為如下步驟使用并且嘗試自動(dòng)修復(fù)所有問(wèn)題有提示,可以進(jìn)行修復(fù),按照配置文件來(lái)進(jìn)行修復(fù)。參考文檔如何花分鐘解決產(chǎn)生的各種錯(cuò)誤的記憶現(xiàn)場(chǎng)本文轉(zhuǎn)載自我的更新版梳理前端開(kāi)發(fā)使用和來(lái)檢查和格式化代碼問(wèn)題 更新版,之前的版本可以看這里:梳理前端開(kāi)發(fā)使用eslint和prettier來(lái)檢查和格式化代碼問(wèn)題 一、問(wèn)題痛點(diǎn) 在團(tuán)隊(duì)的項(xiàng)目開(kāi)發(fā)過(guò)程中,代碼維護(hù)所占的時(shí)間比重...
摘要:項(xiàng)目編碼規(guī)范化工具工具代碼校驗(yàn)工具,讓代碼更一致和避免。在配置文件到項(xiàng)可對(duì)單條規(guī)則一一進(jìn)行改寫(xiě)。以下以項(xiàng)目需校驗(yàn)文件為例參考鏈接一步一步,統(tǒng)一項(xiàng)目中的編碼規(guī)范 Web 項(xiàng)目編碼規(guī)范化工具 工具 ESLint The pluggable linting utility for JavaScript and JSX 代碼校驗(yàn)工具(linting utility),讓代碼更一致和避免 bug...
摘要:打造個(gè)人團(tuán)隊(duì)適用的開(kāi)源項(xiàng)目規(guī)范是一個(gè)用來(lái)優(yōu)化托管在上的多代碼庫(kù)的工作流的一個(gè)管理工具可以讓你在主項(xiàng)目下管理多個(gè)子項(xiàng)目,從而解決了多個(gè)包互相依賴(lài),且發(fā)布時(shí)需要手動(dòng)維護(hù)多個(gè)包的問(wèn)題。 打造個(gè)人or團(tuán)隊(duì)適用的開(kāi)源項(xiàng)目規(guī)范 lerna Lerna 是一個(gè)用來(lái)優(yōu)化托管在gitnpm上的多package代碼庫(kù)的工作流的一個(gè)管理工具,可以讓你在主項(xiàng)目下管理多個(gè)子項(xiàng)目,從而解決了多個(gè)包互相依賴(lài),且發(fā)布...
閱讀 740·2023-04-25 19:43
閱讀 3986·2021-11-30 14:52
閱讀 3816·2021-11-30 14:52
閱讀 3873·2021-11-29 11:00
閱讀 3808·2021-11-29 11:00
閱讀 3907·2021-11-29 11:00
閱讀 3584·2021-11-29 11:00
閱讀 6197·2021-11-29 11:00