Angular(03)-- lint風格規範和WebStorm小技巧

来源:https://www.cnblogs.com/dasusu/archive/2019/03/22/10582126.html
-Advertisement-
Play Games

在開始講 Angular 各個核心知識點之前,想先來講講開發工具 WebStorm 的一些配置以及相應配置文件如 tslint.json 的配置。 因為我個人比較註重代碼規範、代碼風格,而對於這些規範,我只有一個觀點: 一切需要依賴開發人員的主觀意識去遵守的規範都沒有多大意義。 以前做 Androi ...


在開始講 Angular 各個核心知識點之前,想先來講講開發工具 WebStorm 的一些配置以及相應配置文件如 tslint.json 的配置。

因為我個人比較註重代碼規範、代碼風格,而對於這些規範,我只有一個觀點:一切需要依賴開發人員的主觀意識去遵守的規範都沒有多大意義。

以前做 Android 開發時會藉助 AndroidStudio 來強制遵守一些規範,現在前端項目我用的是 WebStorm 開發,這兩個開發工具本質上同源,所以很多功能都差不多。

那麼,這篇就來講一講,如何對 WebStorm 進行一些設置,讓它可以更好的輔助我們遵守風格規範,同時,理清一些比如 tslint.json 的配置,來讓開發工具實時檢測我們寫的代碼是否有很好的遵守規範。

風格規範

Angular 項目的很多文件都是通過 Angular-CLI 工具的 ng 命令來生成的,生成時就有預設一些代碼風格,而且,WebStorm 預設也有一些代碼風格,也許有人覺得直接使用預設的風格來即可。

但對於預設的一些風格規範,我不是很贊同,比如說:

name: string = 'dasu'

簡單的在某個類中聲明這麼一個 name 變數,類型是 string,初始值為 dasu,但預設的 tslint.json 配置的代碼風格會報錯,因為它建議我們,既然已經初始化為字元串類型了,就沒有必要再去聲明變數的類型了。

對於這種預設風格,我個人並不贊同,因為個人習慣了 Java 的風格,對於變數的類型聲明已經習慣了,更何況,這個初始值有可能在未來被去掉,那麼,這時候豈不是還要去加上類型說明?

所以,我個人還是比較習慣聲明變數的類型,不管有沒有對其進行初始化。

以上只是個簡單的例子,預設的一些代碼風格,我個人都不是很習慣,所以,下麵列舉我的個人代碼風格,供大伙借鑒、參考。

不多,只有幾點而已,因為大多直接使用預設的代碼風格,只是預設的一些風格中,我不是很習慣的情況下,才會對其進行修改。

命名方面

  • 私有屬性和方法以 _ 一個下劃線開頭,並添加 private 修飾符
  • 公有屬性和方法使用預設的不加修飾符
  • 與組件對應的模板 html 綁定事件相關的方法,以 on 為首碼
  • 組件的輸出屬性(@Output) 不以 on 為首碼
  • 表格數據的 *ngFor 指令時,建議以 item 命名每一項,如 *ngFor="let item of page?.result" 這樣便於各個頁面的代碼直接複製粘貼

格式

  • HTML 中使用 "" 雙引號,ts 中使用 '' 單引號
  • HTML 和 ts 的縮進都使用 4 個空格
  • 局部變數允許使用 let,並不一定強制使用 const
  • 所有變數聲明時直接指明其類型

tslint.json

創建一個新的 Angular 項目時,會自動生成項目的腳手架,裡面包括了各種各樣的文件,其中有一份是 tslint.json 文件,是用來給 WebStorm 實時對代碼進行 lint 檢測時的代碼風格配置。

我修改了部分預設的配置,下麵給出的是所有項的配置,其中帶有註釋的配置項,就是我增加或修改原本預設的配置項,是基於我上面說的個人的一些習慣風格而進行的修改:

"rules": {
    "arrow-return-shorthand": true,
    "adjacent-overload-signatures": true, // override 函數是否集中放置 (新增)
    "callable-types": true,
    "class-name": true,
    "comment-format": [
      true,
      "check-space"
    ],
    "curly": true,
    "deprecation": {
      "severity": "warn"
    },
    "eofline": false,  // 文件末尾是否需要空新行 (預設 true)
    "encoding": true,  // 文件編碼是否預設 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 // 預設140,我屏幕挺大的,所以並不反感某一行代碼過長,相反,很多代碼因為自動換行後,我個人感覺更不習慣,還不如我手動來選擇從某個地方換行
    ],
    "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, // 是否禁止重覆 case (新增)
    "no-duplicate-imports": true,     // 是否禁止重覆 import (新增)
    "no-duplicate-variable": [        // 是否禁止重覆變數聲明 (新增)
      true,
      "check-parameters"
    ],
    "no-conditional-assignment": true, // 禁止在分支條件判斷中有賦值操作 (新增)
    "no-empty": false,
    "no-empty-interface": true,
    "no-eval": true,
    "no-inferrable-types": [  // 是否禁止在有初始值的變數聲明上,增加類型聲明 (預設 true)
      false,
      "ignore-params"
    ],
    "no-mergeable-namespace": true, // 是否禁止重覆的命名空間 (新增)
    "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,      // 是否禁止末尾空格 (預設 true)
    "no-unnecessary-initializer": true,
    "no-unused-expression": false,  // 是否允許無用的表達式存在 (預設 true)
    "no-unused-variable": false,   // 是否允許無用的變數存在 (新增)
    "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,  // 不強制使用 const,允許使用 let
    "quotemark": [  // 引號設置,ts 中單引號
      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 文件只是用來在執行 ng lint 命令,或者代碼編程過程中,開發工具實時檢測,當檢測到不符合風格規範的代碼時,進行報錯處理。

雖然可以在執行 ng lint --fix 時添加 --fix 參數來自動修正一些風格錯誤,但這種方式很耗時,而是代碼編寫過程中,也沒法應用。

所以,可以藉助 Webstorm 的一些配置,一些小技巧,來進行代碼的格式化操作,讓開發工具自動幫我們將代碼整理成符合規範的風格。

WebStorm 小技巧

下麵介紹的這些配置項,都是為代碼的格式化操作(快捷鍵:Ctrl + Alt + L)服務的,意思也就是說,當我們為當前文件進行代碼格式化操作時,WebStorm 就會自動按照我們的這些配置項來自動整理代碼,將代碼整理成遵循規範的風格。

標點符號(引號,分號,逗號)

設置路徑:Settings -> Editor -> Code Style -> TypeScript -> Punctuation

這裡配置項很少,就三個,分別是配置分號,引號和逗號。

  • 第一行用來配置每行代碼末尾是否需要有 ; 分號,且格式化時是否對舊代碼(已經過格式化的代碼)進行處理。
  • 第二行用來配置,代碼中是使用 '' 單引號,還是 "" 雙引號(預設是雙引號),且格式化時是否對舊代碼(已經過格式化的代碼)進行處理。

  • 第三行用來配置是否需要保留,還是去掉數組或對象屬性列表中,最後一項末尾的逗號。

我的代碼風格是 HTML 中使用 "" 雙引號,TypeScript 中使用 '' 單引號,但使用工具自動生成 ts 文件時,引號預設是雙引號,或者某些時候某些因素下,代碼中出現一些雙引號,這時候,通過修改這個配置,在每次格式化代碼時,就都會自動將雙引號轉成單引號,方便、高效。

空格

設置路徑:Settings -> Editor -> Code Style -> TypeScript -> Spaces

格式化操作時,會自動在比如方法的 { 右括弧前,賦值語句的 = 等號兩側等等這些位置自動加上一個空格,如果我們寫代碼時漏掉這些空格時。

這個功能其實是根據這裡的配置項來決定的,這裡面預設勾選了很多,基本符合常見的風格規範:

對於空格,我沒有改掉預設格式化時空格風格,只是增加了幾種場景也需要自動進行空格處理,分別是:

  • Within -> ES6 import/export braces

導入語句 {} 距離內容之間增加一個空格,預設是沒有的,如:

  • Within -> Object literal braces 勾選
  • Within -> Object literal type braces 勾選

這兩個是對象內部的空格處理,預設也是沒有的,如:

對齊和換行

設置路徑:Settings -> Editor -> Code Style -> TypeScript -> Wrapping and Braces

這裡是設置一些對齊或者換行策略:

  • Chained method calls 設置為 Wrap always
  • Chained method calls -> Align when multiline 勾選
  • Chained method calls -> ':' on new line 勾選

上面三個是用來設置方法鏈時,代碼的整理,預設不做處理,可以改成格式化時,自動將每層的方法調用進行換行,並且對齊處理,個人建議。

  • 'if()' statement -> Force braces 設置為 always

這個是設置,即使 if 代碼塊內只有簡單的一行代碼,也要自動為其加上大括弧處理,預設是不做處理。

  • Ternaty operation 設置為 Chop down if long
  • Ternaty operation -> Align when multiline 勾選
  • Ternaty operation -> '?' and ':' signs on next line 勾選

這個是用來設置 ? : 運算符的處理,上面的設置意思是,當代碼過長時,自動將 ?: 的代碼換行,並對其處理,預設是不做處理。

  • Array initializer 設置為 Chop down if long
  • Array initializer -> Align when multiline 勾選
  • Array initializer -> New line after '[' 勾選
  • Array initializer -> Place ']' on new line 勾選

這個是用來設置數組的處理,以上配置的意思是,當數組過長時,自動將每一項進行換行並對其處理,[] 單獨占據一行:

[圖片上傳失敗...(image-e2d886-1553268791353)]

對於 Angular 中的 @NgModel 的文件來說,經常會有這種風格需要,所以就直接這麼配置了。

  • Objects -> Align 設置為 On Value
  • Variable declarations 設置為 Chop down if long
  • Variable declarations -> Align 設置為 when grouped

這個是用來設置變數或者對象的屬性列表的賦值語句的對齊模式,如:

同理,也可以設置 CSS 的樣式屬性的對齊方式:

以上,只是我的個人風格習慣,大體上,我都直接按照預設的風格規範來遵守,但在個把一些項上,個人有不同的看法和習慣,所以修改掉了預設的風格配置。

另外,我比較習慣使用格式化代碼操作,而且一個項目中,代碼全是我自己寫的可能性也很小,別人寫的代碼或多或少都存在一些風格規範問題,也沒辦法強制性要求他人必須遵守,所以,就瞎折騰了下 WebStorm 的相關配置。

這樣,就方便我對別人的代碼也直接通過格式化操作來自動進行風格規範處理。


大家好,我是 dasu,歡迎關註我的公眾號(dasuAndroidTv),公眾號中有我的聯繫方式,歡迎有事沒事來嘮嗑一下,如果你覺得本篇內容有幫助到你,可以轉載但記得要關註,要標明原文哦,謝謝支持~
dasuAndroidTv2.png


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一.客戶端與服務端模型 1.mysql是一個典型的c/s服務結構 1.mysql自帶的客戶端程式(/application/mysql/bin) mysql mysqladmin mysqldump 2.市面上大部分的開發語言都需要一個客戶端連接程式連接mysql的服務端 2.mysql是一個守護進 ...
  • 一.Mysql安裝方式 1.安裝方式 1.rpm,yum安裝 安裝方便,安裝速度快,但無法定製 2.二進位安裝 不需要安裝,解壓即用,不能定製功能 3.編譯安裝 可定製,安裝很慢,安裝分為四個步驟 1.1 解壓(tar) 1.2 生成(./configure)或者cmake 1.3 編譯(make) ...
  • 應用程式慢如牛,原因多多,可能是網路的原因、可能是系統架構的原因,還有可能是資料庫的原因。 那麼如何提高資料庫SQL語句執行速度呢?有人會說性能調優是資料庫管理員(DBA)的事,然而性能調優跟程式員們也有莫大的關係 程式中嵌入的一行行的SQL語句,如果使用了一些優化小技巧,定能達到事半功倍的效果... ...
  • Mysql常用命令 啟動 net start mysql 關閉 net stop mysql 連接mysql mysql uroot ppssword mysql uroot P3307 ppssword 修改密碼 mysqladmin uroot p123456 password 123 增加用戶 ...
  • In order to build a complete ffmpeg with hardware acceleration for Intel platform (XXX lake + Atom), we need a complete Android x86 build, the cross-c ...
  • 程式6:用*號輸出字母C的圖案 console.log(' ****'); console.log(' ***'); console.log(' **'); console.log(' *'); console.log('*'); console.log(' *'); console.log(' * ...
  • 非同步請求 其實什麼是非同步請求已經不用多說了,通俗的說,就是整個頁面不會刷新,需要更新的部分數據做局部刷新,其他數據不變。 學到這裡,你應該用過jquery里的ajax了,所以很能理解了,不多說了。詳細的就自己百度了 在vue中,可以做非同步請求的有vue-resource和axios ... ...
  • global對象 瀏覽器端JavaScript中的全局對象為“window”,在瀏覽器中定義的變數都會成為“window”對象的屬性。 不像瀏覽器端JavaScript,在Nodejs中沒有window對象,Nodejs中的全局對象為“global”,並且我們定義的變數不會作為“global”的屬性 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...