हम प्रिटियर, हस्की और लिंट-स्टेज के साथ ESLint पर कोणीय परियोजना को पोर्ट करते हैं

हेलो, हेब्र! मेरा नाम बोगदान है, मैं PIC डिजिटल फ्रंट-एंड टीम लीड में काम करता हूं। हम कोणीय पर अधिकांश परियोजनाओं का विकास कर रहे हैं, और हाल ही में मैंने अपनी शैली गाइडों की समीक्षा करने का फैसला किया, साथ ही साथ अधिक सुविधाजनक काम के लिए नए उपकरण भी जोड़े।

लिंटर के रूप में, मैंने ESLint का उपयोग करने का फैसला किया, क्योंकि वे जल्द ही इसे कोणीय स्थानांतरित करने की योजना बनाते हैं। और इस लेख में मैं TSLint से ESLint पर स्विच करने के निर्देश साझा करना चाहता हूं, और साथ ही यह बताऊंगा कि ESLint से Prettier को कैसे चलाया जाए, AirBnB स्टाइल गाइड नियमों को कैसे जोड़ा जाए, और VS कोड और Git हुक सेट करके लाइनिंग को सुविधाजनक और अदृश्य कैसे बनाया जाए।

Prettier और ESLint


ESLint स्थिर कोड विश्लेषण के लिए एक उपकरण है, नियमों को दो समूहों में विभाजित किया गया है:

  • स्वरूपण - कोड को एक दृश्य में लाने के लिए: लाइन की लंबाई, अल्पविराम, अर्धविराम, आदि।
  • कोड गुणवत्ता - समस्याग्रस्त कोड टेम्प्लेट खोजना: अनावश्यक कोड, त्रुटियां।

प्रीटियर एक स्वचालित कोड स्वरूपण उपकरण है।

यह सवाल कि मुझे दिलचस्पी थी: प्रेटियर का उपयोग क्यों करें यदि ESLint कोड को प्रारूपित भी कर सकता है?

इसका उत्तर सरल है - प्रीटीयर कोड को बेहतर तरीके से प्रारूपित करता है: सभी स्वरूपण को हटा देता है और एक ही शैली में कोड को पूरी तरह से फिर से लिखता है। इससे डेवलपर्स कोड स्वरूपण के बारे में भूल जाते हैं और समीक्षा के लिए कोड शैली पर चर्चा करने में समय बर्बाद नहीं करते हैं। उदाहरण के लिए, हमारे पास कोड की एक लंबी रेखा है:

छवि

यदि हम ESLint के माध्यम से स्वरूपण को बदलने की कोशिश करते हैं, तो यह हमें एक त्रुटि देगा:

eslint example.ts --fix

output:
error    This line has a length of 97. Maximum allowed is 80

इस तरह के एक उदाहरण से पता चलता है कि लिंटर हमेशा कोड स्वरूपण में मदद नहीं कर सकता है, और डेवलपर्स अपने व्यक्तिगत विचारों के आधार पर इस कोड को विभिन्न तरीकों से प्रारूपित कर सकते हैं।

अगर हम फ़ाइल को Prettier के साथ सेव या फॉर्मेट करते हैं, तो लाइन फॉर्म

छवि

लेगी : Prettier पूरे कोड बेस में एक समान स्टाइल प्रदान करता है। इसलिए, इसे ESLint के साथ एक साथ इस्तेमाल किया जा सकता है, लेकिन आपको उन्हें कॉन्फ़िगर करने की आवश्यकता है ताकि वे एक-दूसरे के साथ हस्तक्षेप न करें।

ESLint सेटअप


ESLint का उपयोग करते हुए लाइनिंग का सार पार्सर्स में है जो कोड को AST (सार सिंटैक्स ट्री) में परिवर्तित करता है और आगे के सॉफ्टवेयर प्रोसेसिंग के लिए, और प्लगइन्स जिसमें नियम होते हैं, उदाहरण के लिए, टाइपस्क्रिप्ट लाइनिंग या AirBnB कोड गाइड नियमों के लिए अनुशंसित नियम।

स्थापना


ESLint को एक कोणीय अनुप्रयोग माइग्रेट करने के लिए, हमें निम्न निर्भरताओं की आवश्यकता है:


उन्हें स्थापित करने के लिए, बस कमांड चलाएँ:

ng add @angular-eslint/schematics

लेखन के समय, टाइपस्क्रिप्ट-एस्लिंट और कोणीय-एस्लिंट में टीएसएलआईएनटी के लिए मानक कोडेलीजर कॉन्फ़िगरेशन से नियमों के लिए सभी समकक्ष नहीं हैं , लेकिन उनमें से ज्यादातर पहले से मौजूद हैं। आप TSLint से ESLint में कोणीय ESLint और टाइपस्क्रिप्ट ESLint मोनो-रिपॉजिटरी में नियमों को स्थानांतरित करने की वर्तमान स्थिति की निगरानी कर सकते हैं

कॉन्फ़िगरेशन कॉन्फ़िगर करें


सब कुछ हमें कोणीय अनुप्रयोगों को लिंट करने की आवश्यकता है, हमने स्थापित किया। अब आइए ESLint को कॉन्फ़िगर करने के लिए आगे बढ़ते हैं। चलो एक .eslintrc.js फ़ाइल बनाते हैं और कोणीय ESLint के लिए अनुशंसित सेटिंग्स जोड़ते हैं:

module.exports = {
  extends: ['plugin:@angular-eslint/recommended'],
  rules: {
    '@angular-eslint/directive-selector': [
      'error',
      { type: 'attribute', prefix: 'app', style: 'camelCase' },
    ],
    '@angular-eslint/component-selector': [
      'error',
      { type: 'element', prefix: 'app', style: 'kebab-case' },
    ],
  },
  overrides: [
    //   ,       *.component.ts
    {
      files: ['*.component.ts'],
      parser: '@typescript-eslint/parser',
      parserOptions: {
        ecmaVersion: 2020,
        sourceType: 'module',
      },
      plugins: ['@angular-eslint/template'],
      processor: '@angular-eslint/template/extract-inline-html',
    },
  ],
};

कन्फ़िग्स को विभिन्न स्वरूपों में वर्णित किया जा सकता है: जावास्क्रिप्ट, JSON या YAML फ़ाइल। आप जावास्क्रिप्ट में टिप्पणी छोड़ सकते हैं।

"Plugin: @ angular-eslint / अनुशंसित" में एक साथ 3 प्लगइन्स के लिए सेटिंग्स शामिल हैं: "@ टाइपस्क्रिप्ट-एस्लिंट / एस्लिंट-प्लगइन", "@ कोणीय-एसलिंट / एस्लिंट-प्लगइन" और "कोणीय-एस्लिंट / एस्लेंट-टेम्पलेट-टेम्पलेट" " आप पढ़ सकते हैं कि वह यहाँ क्या नियम निर्धारित करता है

एनजी लिंट कमांड अपडेट


इसके अलावा कोणीय.जॉन कॉन्फ़िगरेशन में, आपको एनजी लिंटर कमांड को @ कोणीय-एसलिंट / बिल्डर चलाने के लिए अपडेट करने की आवश्यकता है :

"lint": {
  "builder": "@angular-eslint/builder:lint",
  "options": {
    "eslintConfig": ".eslintrc.js",
    "tsConfig": [
      "tsconfig.app.json",
      "tsconfig.spec.json",
      "e2e/tsconfig.json"
    ],
    "exclude": [
      "**/node_modules/**"
    ]
  }
},

मूल ESLint सेटअप तैयार है, अब आप ESLint को मानक एनजी लिंट कमांड के साथ शुरू कर सकते हैं

अतिरिक्त प्लगइन्स स्थापित करें


ESLint के लिए प्लगइन स्थापित करने के लिए, उदाहरण के लिए, कोणीय में लाइनिंग यूनिट परीक्षणों के लिए, आपको सेटिंग्स में जैस्मीन प्लगइन को डाउनलोड और जोड़ना होगा :

npm install eslint-plugin-jasmine --save-dev

और * .spec.ts एक्सटेंशन के साथ "ओवरराइड्स" संपत्ति के साथ फ़ाइलों के लिए एक नई सेटिंग ब्लॉक जोड़ें:

overrides: [
  ...,
  {
    files: ['src/**/*.spec.ts', 'src/**/*.d.ts'],
    parserOptions: {
      project: './src/tsconfig.spec.json',
    },
    //   
    extends: ['plugin:jasmine/recommended'],
    //    
    plugins: ['jasmine'],
    env: { jasmine: true },
    //   'no-unused-vars'
    rules: {
      '@typescript-eslint/no-unused-vars': 'off',
    },
  }
],

सादृश्य से, आप विभिन्न फ़ाइल एक्सटेंशन के लिए अन्य प्लगइन्स जोड़ सकते हैं।

स्टाइल गाइड गाइड जोड़ना


कोड आधार की अधिक संगति प्राप्त करने के लिए, आप ESLint कॉन्फ़िगरेशन में लोकप्रिय शैली गाइडों में से एक का चयन और जोड़ सकते हैं:

  • AirBnB : तीनों में से सबसे लोकप्रिय और सख्त, अनिवार्य ट्रेलिंग कॉमा और सेमीकोलन।
  • Google : स्वरूपण के संदर्भ में AirBnB के समान, लेकिन कम सख्त, अनिवार्य JSDoc टिप्पणियां।
  • StandartJS : अनुगामी अल्पविराम और अर्धविरामों के उपयोग को प्रतिबंधित करता है।

एक स्टाइल गाइड चुनें जो आपकी टीम के लिए अधिक उपयुक्त हो। आप किसी बड़े प्रोजेक्ट पर सभी स्टाइल गाइड की कोशिश कर सकते हैं, देखें कि लिंटर क्या त्रुटियां पैदा करता है और इसके आधार पर चुनाव करता है।

टाइपस्क्रिप्ट शैली मार्गदर्शिका का कार्यान्वयन चुनें क्योंकि जावास्क्रिप्ट नियम टाइपस्क्रिप्ट पर सही ढंग से काम नहीं कर सकते हैं।

एक उदाहरण के रूप में, आइए AirBnB स्टाइल गाइड को हमारे ESLint कॉन्फ़िगरेशन में जोड़ें। ऐसा करने के लिए, टाइपस्क्रिप्ट के लिए AirBnB नियमों और आयात / निर्यात सिंटैक्स के साथ काम करने के लिए नियमों के साथ प्लगइन को कॉन्फ़िगर करें:

npm install eslint-plugin-import eslint-config-airbnb-typescript --save-dev

शीर्ष-स्तरीय सेटिंग्स को नहीं बदलने के लिए, हम AirBnB स्टाइल गाइड नियमों और उनके काम के लिए आवश्यक टाइपस्क्रिप्ट पार्सर के साथ "ओवरराइड" संपत्ति में नियमों का एक नया ब्लॉक बनाएंगे:

module.exports = {
  ...,
  overrides: [
    ...,
    {
      files: ['*.ts'],
      extends: [
        'airbnb-typescript/base',
      ],
      parser: '@typescript-eslint/parser',
      parserOptions: {
        ecmaVersion: 2020,
        sourceType: 'module',
      },
    },
  ]
}

एक और स्टाइल गाइड जोड़ने के लिए, आपको टाइपस्क्रिप्ट के लिए नियमों का एक सेट स्थापित करने की आवश्यकता है, स्टाइल गाइड के नियमों के साथ "ओवरराइड्स" में नियमों का एक नया ब्लॉक बनाएं और अपने काम के लिए आवश्यक पार्सर निर्दिष्ट करें।

अनुकूलन नियम


यदि आप मार्गदर्शिका की शैली में कुछ नियमों को अक्षम या पुनर्परिभाषित करना चाहते हैं, तो आप इसे "नियम" संपत्ति में कर सकते हैं:

module.exports = {
  ...,
  overrides: [
    ...,
    {
      files: ['*.ts'],
      extends: [
        'airbnb-typescript/base',
      ],
      parser: '@typescript-eslint/parser',
      parserOptions: {
        ecmaVersion: 2020,
        sourceType: 'module',
      },
      //  
      rules: {
        'import/no-unresolved': 'off',
        'import/prefer-default-export': 'off',
        'class-methods-use-this': 'off',
        'lines-between-class-members': 'off',
        '@typescript-eslint/unbound-method': [
          'error',
          {
            ignoreStatic: true,
          },
        ],
      },
    },
  ]
}


Prettier कॉन्फ़िगर करें


अपने कॉन्फ़िगरेशन में Prettier जोड़ने के लिए, हमें खुद Prettier को स्थापित करने की आवश्यकता है, Prettier नियमों के साथ एक प्लगइन, साथ ही साथ एक कॉन्फ़िगरेशन जो उन सभी नियमों को अक्षम कर देगा जो Prettier के साथ संघर्ष कर सकते हैं:

npm i prettier eslint-config-prettier eslint-plugin-prettier --save-dev

विस्तार के साथ फ़ाइलों के नियमों के साथ ब्लॉक में "ओवरराइड्स" में। संपत्ति में ".ts" बहुत नीचे से "फैली हुई है" नियम और प्रीटीयर सेटिंग्स जोड़ें:

module.exports = {
  ...,
  overrides: [
    ...,
    {
      files: ['*.ts'],
      extends: [
        //   AirBnB
	'airbnb-typescript/base',
	//   Prettier
	'prettier/@typescript-eslint',
	'plugin:prettier/recommended',
      ],
      ...,
    },
  ]
}

Prettier के लिए कॉन्फ़िगरेशन हमेशा किसी भी नियमों को अधिलेखित करने के लिए सूची के बहुत नीचे होना चाहिए जो Prettier के साथ संघर्ष कर सकता है।

`prettier / @ टाइपस्क्रिप्ट-एसलाइंट`, @ टाइपस्क्रिप्ट-एस्लिंट` नियमों को निष्क्रिय कर देता है, जो कि प्रीटीयर के साथ संघर्ष कर सकता है, और `प्लगइन: प्रीटीयर / अनुशंसित` तीन काम करता है:

  • एस्लिन्ट-प्लगइन-प्रीटीयर शामिल हैं,
  • प्रिंट करने के लिए प्रिटियर / प्रीटियर नियम त्रुटियों को "त्रुटि" के रूप में प्रिंट करता है,
  • Prettier eslint-config-prettier स्वरूपण नियम जोड़ता है।

Prettier के लिए कॉन्फ़िगर करें:


Prettier किसी भी सेटिंग के बिना कोड को प्रारूपित कर सकता है, लेकिन AirBnB स्टाइल गाइड से मिलान करने के लिए, आपको कुछ सेटिंग्स जोड़ने की आवश्यकता है। अनुप्रयोग के मूल में .prettierrc.js फ़ाइल बनाएँ:

module.exports = {
  trailingComma: "all",
  tabWidth: 2,
  semi: true,
  singleQuote: true,
  bracketSpacing: true,
  printWidth: 100
};

इन सेटिंग्स का उपयोग ESLint और Prettier दोनों द्वारा किया जाएगा यदि आप इसका उपयोग VS कोड में फ़ाइलों को प्रारूपित करने के लिए या कमांड के साथ करते हैं:

prettier "--write ."

VS कोड कॉन्फ़िगर करें


VS कोड त्रुटियों को सहेजते समय ESLint की त्रुटियों को उजागर और सही कर सकता है। ऐसा करने के लिए, VS कोड के लिए ESLint प्लगइन डाउनलोड करें और कार्यक्षेत्र के लिए सेटिंग्स के साथ परियोजना के अंदर एक फ़ाइल बनाएं ।vscode / settings.json:

  "eslint.validate": [ "javascript", "typescript", "html"],

  "eslint.options": {
    "extensions": [".js", ".ts", "html"]
  },

  "editor.codeActionsOnSave": {
    "source.fixAll.eslint": true,
  },

जब हम .js, .ts और .html एक्सटेंशन के साथ फ़ाइलों को सहेजते समय त्रुटियों पर जोर देने और सही करने के लिए ESLint को कॉन्फ़िगर करते हैं।

और "शिफ्ट + विकल्प + एफ" या "शिफ्ट + ऑल्ट + एफ" कुंजी संयोजनों का उपयोग करते हुए एक दस्तावेज़ को प्रारूपित करने के लिए, वीएस कोड के लिए प्रीटीयर प्लगइन डाउनलोड करें और इसे डिफ़ॉल्ट फ़ॉर्मेटर के रूप में सेट करें।

गिट हुक स्थापित करना


Git हुक स्क्रिप्ट हैं जो Git कुछ घटनाओं पर आह्वान करता है: प्रतिबद्ध, धक्का, प्राप्त करना।

उनकी मदद से, हम एक कमिट बनाते समय कोड को लिंट करना शुरू कर सकते हैं ताकि रिक्वेस्ट पूल में कम एरर आए। गिट हुक के साथ और अधिक सुविधाजनक काम के लिए, हुस्की स्थापित करें , और केवल उस कोड को जांचने के लिए जो कि इसमें जोड़ा गया है (यह बड़ी परियोजनाओं में उपयोगी है जहां लाइनिंग में बहुत समय लगता है) लिंट-स्टेज्ड :

npm i husky lint-staged --save-dev

इन प्लग इन के लिए सेटिंग्स को package.json में जोड़ें:

"scripts": {
  ...
},
"husky": {
  "hooks": {
    "pre-commit": "lint-staged --relative"
  }
},
"lint-staged": {
  "*.{js,ts}": [
     "eslint --fix"
  ]
},

लिंट-स्टेज्ड संशोधित फ़ाइलों की एक सरणी को कमांड को पास करता है। एनजी लिंट कमांड फाइलों की एक सरणी को स्वीकार करना नहीं जानता है, और इसका उपयोग करने के लिए, आपको एक अतिरिक्त स्क्रिप्ट प्रोसेसर लिखने की आवश्यकता है। या आप इस उदाहरण में, केवल ESLint को कॉल कर सकते हैं। इस तरह के एक समाधान का उपयोग प्रीकॉमिट्स के लिए किया जा सकता है, और आप पूरे प्रोजेक्ट को लिंट करने के लिए एनजी लिंट चला सकते हैं, उदाहरण के लिए, सीआई पाइपलाइन में।

जाँच - परिणाम


कोणीय के भविष्य के संस्करणों में, बुनियादी नियमों के साथ ESLint बॉक्स से बाहर हो जाएगा। अब ESLint कॉन्फ़िगरेशन प्रक्रिया को कुछ अतिरिक्त चरणों की आवश्यकता है, ESLint के पास TSLint के कुछ नियमों के लिए कोई समकक्ष नहीं है, और Angular ESLint अभी भी अल्फा संस्करण में है। इसलिए, अब ESLint पर स्विच करने के लिए या नहीं आप पर निर्भर है।

हालांकि, गाइड कोड, अतिरिक्त नियम, प्रीटीयर, हस्की और लिंट-स्टेज्ड आपको खुद को कॉन्फ़िगर करना होगा। मुझे उम्मीद है कि इस लेख ने आपको यह पता लगाने में मदद की है कि ये सभी चीजें एक साथ कैसे काम करती हैं।

लिंटर को कॉन्फ़िगर करना एक तुच्छ कार्य की तरह लग सकता है, लेकिन इसमें कई महत्वपूर्ण संगठनात्मक मुद्दे शामिल हैं: स्टाइल गाइड चुनना, एक दूसरे के साथ विभिन्न समाधानों को सिंक्रनाइज़ करना।

लेकिन भविष्य में लिंटर को कॉन्फ़िगर करने में लगने वाला समय आपको कोड समीक्षा प्रक्रिया में कोड की शैली और स्वरूपण पर चर्चा करने में काफी समय बचाएगा, अनुरोध पूल में आने वाली त्रुटियों की संख्या को कम करेगा और कोड बेस की स्थिरता सुनिश्चित करेगा। जीथब

पर एक उदाहरण कार्यान्वयन पाया जा सकता है यदि आपको कॉन्फ़िगरेशन में कोई गलती मिलती है, या आपके पास ऐड-ऑन है - लिखो!



संदर्भ



All Articles