„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Einrichten von Linters und IDEs für Angular 18

Einrichten von Linters und IDEs für Angular 18

Veröffentlicht am 09.11.2024
Durchsuche:492

Eslint, Prettier, Env zur Anwendung hinzufügen.

Es ist schade, dass Angular standardmäßig nicht alles selbst generiert. Das Ändern von Schaltplänen kann die Qualität von mehreren tausend Angular-Projekten verbessern.

Eslint 9 einrichten

Eslint verbinden:

yarn ng add @angular-eslint/schematics

Drei Pakete wurden zu package.json hinzugefügt:

{
  "devDependencies": {
       …,      
       "angular-eslint": "18.0.1",
       "eslint": "^9.3.0",
       "typescript-eslint": "8.0.0-alpha.20" 
   }
}

Und im Ziel in angle.json:

{
  "projects": {
    "buy-and-fly": {
      "architect": {
        …,
        "lint": {
          "builder": "@angular-eslint/builder:lint",
          "options": {
            "lintFilePatterns": [
              "src/**/*.ts",
              "src/**/*.html"
            ]
          }
        }
      }
    }
  },
  "cli": {
    "schematicCollections": [
      "@angular-eslint/schematics"
    ]
  }
}

Die Datei eslint.config.js wurde ebenfalls erstellt:

// @ts-check
const eslint = require("@eslint/js");
const tseslint = require("typescript-eslint");
const angular = require("angular-eslint");

module.exports = tseslint.config(
  {
    files: ["**/*.ts"],
    extends: [
      eslint.configs.recommended,
      ...tseslint.configs.recommended,
      ...tseslint.configs.stylistic,
      ...angular.configs.tsRecommended,
    ],
    processor: angular.processInlineTemplates,
    rules: {
      "@angular-eslint/directive-selector": [
        "error",
        {
          type: "attribute",
          prefix: "app",
          style: "camelCase",
        },
      ],
      "@angular-eslint/component-selector": [
        "error",
        {
          type: "element",
          prefix: "app",
          style: "kebab-case",
        },
      ],
    },
  },
  {
    files: ["**/*.html"],
    extends: [
      ...angular.configs.templateRecommended,
      ...angular.configs.templateAccessibility,
    ],
    rules: {},
  }
);

Einfache Linters sind gut, aber man kann sie verbessern!

Plugin hinzufügen:

yarn add -D eslint-plugin-simple-import-sort

Lassen Sie uns mehrere Regeln einschließen:

// @ts-check
const eslint = require('@eslint/js');
const tseslint = require('typescript-eslint');
const angular = require('angular-eslint');
const simpleImportSort = require('eslint-plugin-simple-import-sort');

module.exports = tseslint.config(
  {
    files: ['**/*.ts'],
    extends: [
      eslint.configs.recommended,
      ...tseslint.configs.recommended,
      ...tseslint.configs.stylistic,
      ...angular.configs.tsRecommended,
      {
        plugins: {
          'simple-import-sort': simpleImportSort,
        },
        rules: {
          'simple-import-sort/imports': [
            'error',
            {
              groups: [['^\\u0000'], ['^@?(?!baf)\\w'], ['^@baf?\\w'], ['^\\w'], ['^[^.]'], ['^\\.']],
            },
          ],
          'simple-import-sort/exports': 'error',
        },
      },
    ],
    processor: angular.processInlineTemplates,
    rules: {
      '@angular-eslint/directive-selector': [
        'error',
        {
          type: 'attribute',
          prefix: 'baf',
          style: 'camelCase',
        },
      ],
      '@angular-eslint/component-selector': [
        'error',
        {
          type: 'element',
          prefix: 'baf',
          style: 'kebab-case',
        },
      ],
      '@typescript-eslint/naming-convention': [
        'error',
        {
          selector: 'default',
          format: ['camelCase'],
          leadingUnderscore: 'allow',
          trailingUnderscore: 'allow',
          filter: {
            regex: '^(ts-jest|\\^.*)$',
            match: false,
          },
        },
        {
          selector: 'default',
          format: ['camelCase'],
          leadingUnderscore: 'allow',
          trailingUnderscore: 'allow',
        },
        {
          selector: 'variable',
          format: ['camelCase', 'UPPER_CASE'],
          leadingUnderscore: 'allow',
          trailingUnderscore: 'allow',
        },
        {
          selector: 'typeLike',
          format: ['PascalCase'],
        },
        {
          selector: 'enumMember',
          format: ['PascalCase'],
        },
        {
          selector: 'property',
          format: null,
          filter: {
            regex: '^(host)$',
            match: false,
          },
        },
      ],
      complexity: 'error',
      'max-len': [
        'error',
        {
          code: 140,
        },
      ],
      'no-new-wrappers': 'error',
      'no-throw-literal': 'error',
      '@typescript-eslint/consistent-type-definitions': 'error',
      'no-shadow': 'off',
      '@typescript-eslint/no-shadow': 'error',
      'no-invalid-this': 'off',
      '@typescript-eslint/no-invalid-this': ['warn'],
      '@angular-eslint/no-host-metadata-property': 'off',
    },
  },
  {
    files: ['**/*.html'],
    extends: [...angular.configs.templateRecommended, ...angular.configs.templateAccessibility],
    rules: {},
  },
)
'], ['^\\.']], }, ], 'simple-import-sort/exports': 'Fehler', }, }, ], Prozessor: angle.processInlineTemplates, Regeln: { '@angular-eslint/directive-selector': [ 'Fehler', { Typ: 'Attribut', Präfix: 'baf', Stil: 'camelCase', }, ], '@angular-eslint/component-selector': [ 'Fehler', { Typ: 'Element', Präfix: 'baf', Stil: 'Kebab-Koffer', }, ], '@typescript-eslint/naming-convention': [ 'Fehler', { Selektor: 'Standard', Format: ['camelCase'], führender Unterstrich: 'erlauben', TrailingUnderscore: 'allow', Filter: { Regex: '^(ts-jest|\\^.*)$', Übereinstimmung: falsch, }, }, { Selektor: 'Standard', Format: ['camelCase'], führender Unterstrich: 'erlauben', TrailingUnderscore: 'allow', }, { Selektor: 'Variable', Format: ['camelCase', 'UPPER_CASE'], führender Unterstrich: 'erlauben', TrailingUnderscore: 'allow', }, { Selektor: 'typeLike', Format: ['PascalCase'], }, { Selektor: 'enumMember', Format: ['PascalCase'], }, { Selektor: 'Eigenschaft', Format: null, Filter: { Regex: '^(host)$', Übereinstimmung: falsch, }, }, ], Komplexität: 'Fehler', 'max-len': [ 'Fehler', { Code: 140, }, ], 'no-new-wrappers': 'Fehler', 'no-throw-literal': 'Fehler', '@typescript-eslint/consistent-type-definitions': 'error', 'no-shadow': 'aus', '@typescript-eslint/no-shadow': 'error', 'no-invalid-this': 'off', '@typescript-eslint/no-invalid-this': ['warn'], '@angular-eslint/no-host-metadata-property': 'off', }, }, { Dateien: ['**/*.html'], erweitert: [...angular.configs.templateRecommended, ...angular.configs.templateAccessibility], Regeln: {}, }, )

Ändern Sie das Anwendungspräfix in angle.json von app in baf.

Bitte beachten Sie, dass das Plugin eslint-plugin-import in eslint 9 nicht unterstützt wird.

Es gibt eine hitzige Diskussion auf Github - github.com/import-js/eslint-plugin-import/issues/2948

Schönere Umgebung


Hübscher hinzufügen:

yarn add -D prettier
yarn add -D hübscher


Lassen Sie uns die Regeln in .prettierrc.json definieren:

yarn add -D prettier
{ „bracketSpacing“: true, „printWidth“: 140, „semi“: wahr, „singleQuote“: true, "tabWidth": 2, „useTabs“: false }


Schließen Sie alles aus, was nicht in .prettierignore formatiert werden soll:

yarn add -D prettier
# Fügen Sie hier Dateien hinzu, um sie von der schöneren Formatierung zu ignorieren /dist /Abdeckung /tmp /node_modules /nginx /.vscode /.Idee package-lock.json package.json Garn.lock .eckig /junit junit.xml /.nx/cache

In der IDE in den schöneren Einstellungen - **/*.{js,ts,jsx,tsx,vue,astro,scss,css,html,json}.

Настройка линтеров и IDE для Angular 18

Links

Alle Quellen befinden sich auf Github im Repository – github.com/Fafnur/buy-and-fly

Die Demo kann hier angesehen werden - buy-and-fly.fafn.ru/

Meine Gruppen: Telegram, Medium, VK, X.com, LinkedIn, Site

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/fafnur/nastroika-lintierov-i-ide-dlia-angular-18-2130?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3