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 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
Hübscher hinzufügen:
yarn add -D prettieryarn 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}.
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
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