window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = Fenster if (w.LeadBooster) { console.warn('LeadBooster existiert bereits') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() Qualität geht vor! 5 einfache Schritte zum Linting Ihres Codes mit GitHub-Workflows im JavaScript-Projekt - The Codest
Der Codest
  • Über uns
  • Dienstleistungen
    • Software-Entwicklung
      • Frontend-Softwareentwicklung
      • Backend-Softwareentwicklung
    • Staff Augmentation
      • Frontend-Entwickler
      • Backend-Entwickler
      • Daten-Ingenieure
      • Cloud-Ingenieure
      • QS-Ingenieure
      • Andere
    • IT-Beratung
      • Prüfung und Beratung
  • Branchen
    • Fintech & Bankwesen
    • E-commerce
    • Adtech
    • Gesundheitstechnik
    • Herstellung
    • Logistik
    • Automobilindustrie
    • IOT
  • Wert für
    • CEO
    • CTO
    • Delivery Manager
  • Unser Team
  • Fallstudien
  • Gewusst wie
    • Blog
    • Begegnungen
    • Webinare
    • Ressourcen
Karriere Kontakt aufnehmen
  • Über uns
  • Dienstleistungen
    • Software-Entwicklung
      • Frontend-Softwareentwicklung
      • Backend-Softwareentwicklung
    • Staff Augmentation
      • Frontend-Entwickler
      • Backend-Entwickler
      • Daten-Ingenieure
      • Cloud-Ingenieure
      • QS-Ingenieure
      • Andere
    • IT-Beratung
      • Prüfung und Beratung
  • Wert für
    • CEO
    • CTO
    • Delivery Manager
  • Unser Team
  • Fallstudien
  • Gewusst wie
    • Blog
    • Begegnungen
    • Webinare
    • Ressourcen
Karriere Kontakt aufnehmen
Pfeil zurück ZURÜCK
2020-03-10
Software-Entwicklung

Qualität geht vor! 5 einfache Schritte zum Linting Ihres Codes mit GitHub-Workflows im JavaScript-Projekt

Wojciech Bak

Die Codequalität ist ein entscheidender Teil des Entwicklungsprozesses, vor allem wenn man langfristig effizient arbeiten will. Es gibt viele Ansätze und bewährte Praktiken, einschließlich der ganzen agilen Methodik, aber die meisten davon beziehen sich auf ein großes Unternehmensprojekt, das von mindestens sechs Personen durchgeführt wird.

Was sollen wir tun, wenn die Projekt gering ist oder der Kunde noch nicht weiß, ob es sich lohnt, mehr zu investieren? Offensichtlich ist bei der MVP-Phase des Projekts, Code Styling oder Unit-Tests haben nicht die höchste Priorität. Investoren wollen in der Regel eine gute Produkt Und mal ehrlich - wenn es funktioniert, muss es doch nicht getestet werden, oder?

Ich habe einige Erfahrung mit Erstellung von Anwendungen von Grund aufauch ohne die Anwendung von Best Practices in erster Linie. Einige geschäftliche Umstände zwangen mich dazu, nach einem Kompromiss zwischen den Budgetplänen eines Investors und der "Nice-to-have"-Liste des Entwicklers zu suchen. Wenn Sie GitHub verwenden, lassen sich die meisten der üblichen Probleme im Zusammenhang mit der Codequalität glücklicherweise in wenigen Minuten lösen.

In diesem Artikel zeige ich Ihnen, wie Sie GitHub-Workflows in der Node.js-Umgebung verwenden können, um Ihre Codebase zu standardisieren.

Ein paar Annahmen, bevor wir beginnen:

  • Sie sind mit NPM und der Linux-Konsole vertraut.
  • Sie haben einige Erfahrung mit Style-Präprozessoren, Modulladern, Bundlern usw.
  • Sie wissen, wozu Linters da sind, und wollen sie wirklich für Ihre Projekte verwenden.

1. Typische JavaScript-Projektstruktur

Wenn Sie jemals einige JS-Frameworks wie Vue oder React, können Sie leicht einige Gemeinsamkeiten zwischen ihnen erkennen, z. B:

  • /src Verzeichnis mit Ihrer gesamten JS-Logik und Komponenten,
  • /test Verzeichnis für Unit- und e2e-Tests,
  • /Vermögenswerte Verzeichnis für Stile, Bilder usw.

Auch wenn es sich um JavaScript Projekt, arbeiten wir in Knotenpunkt Umgebung, also sollte es offensichtlich auch einige Node-Sachen geben wie paket.json, paket-lock.json und /node_modules Katalog in unserem Stammverzeichnis.

All diese Dinge sind an ihrem Platz - das nennen wir die Tagung. Frameworks werden erfunden, um einige vernünftige Konventionen bereitzustellen, so dass wir uns normalerweise nicht einmal um das ursprüngliche Entwurfsmuster kümmern müssen. Da ich in diesem Beispiel einige Ansätze erläutern möchte, werde ich keine gebrauchsfertigen Lösungen wie Vue CLI verwenden.

Es ist an der Zeit zu verstehen, was sich hinter all diesen magischen Fusselskripten verbirgt!

2. Erweiterung des typischen Node-Projekts

Um qualitativ hochwertige Lösungen anbieten zu können, sind Linters das erste, womit wir beim Einrichten eines neuen Projekts beginnen sollten. Konzentrieren wir uns auf zwei Linters - Stylelint für Stile (*.scss) und ESLint für Quelldateien (*.js). Beide Linters sind bei NPM verfügbar und ziemlich einfach zu konfigurieren. Die Verwendung von Linters erfordert den Installationsprozess, das Hinzufügen von Konfigurationsdateien und die Definition von Projektskripten. Lassen Sie uns Schritt für Schritt vorgehen.

3. Hinzufügen von Stylelint

Die Installation von Stylelint in der Node-Umgebung ist sehr einfach. Gemäß offizielle Dokumentemüssen Sie nur noch laufen:

npm install --save-dev stylelint stylelint-konfig-standard

und warten, bis es fertig ist.

stylelint-konfig-standard bietet einen Standardsatz von Linting-Regeln und kann durch ein beliebiges Paket ersetzt werden, das Ihren Bedürfnissen besser entspricht (z. B. Airbnb-Stil). Erstellen Sie dann eine neue versteckte Datei .stylelintrc.jsondie Stylelint-Konfigurationsdatei, die für das Laden unserer vordefinierten Regeln verantwortlich ist:

{
    "extends": "stylelint-config-standard"
}

Im Moment fehlt nur noch ein NPM-Skript (oder Skripte), das in der package.json-Datei deklariert ist, um das Linting unserer SCSS-Dateien zu starten. Hier ist mein Vorschlag:

"Skripte": {
    "lint:scss": "stylelint '**/*.scss' --syntax scss -f verbose --color",
    "lint:scss:fix": "stylelint '**/*.scss' --syntax scss --fix -f verbose -color"
}

Wie Sie sehen können, habe ich das Skript mit -fix zu verwenden, bevor die Änderungen in das Repository übertragen werden.

Denken Sie daran - es ist eine schlechte Praxis, die -fix in Ihrem CI-Flow, denn dann wird der Code, den Sie an die Produktion übergeben, im Repository nicht richtig gestylt. Deshalb brauchen wir die beiden Skripte.

Testen wir unseren Linter, indem wir eine Datei erstellen /assets/scss/styles.scss mit einigen Inhalten, wie:

body {
                    Hintergrundfarbe: #fff;
}
npm lint:scss ausführen

In Ihrer Konsole sollten Sie etwa Folgendes sehen:

> stylelint '**/*.scss' --syntax scss -f verbose --color

assets/scss/styles.scss

2:21 ✖ Erwartete Einrückung von 2 Leerzeichen Einrückung

1 Quelle geprüft

~/Codest/Projects/github-workflow-demo/assets/scss/styles.scss

1 Problem gefunden

Schweregrad "Fehler": 1

Einrückung: 1

npm ERR! code ELIFECYCLE

npm ERR! errno 2

npm ERR! [email protected] lint:scss: `stylelint '**/*.scss' --syntax scss -f verbose --color`

npm ERR! Exit-Status 2

Das bedeutet, dass unser Linter tatsächlich funktioniert!

Die Ausgabe zeigt genau an, welche Zeile einen Fehler verursacht und beschreibt das zu lösende Problem. Einige Probleme können nicht automatisch behoben werden, da sie die Entscheidung eines Entwicklers erfordern, aber in den meisten Fällen müssen Sie nur denselben Befehl mit -fix Option, also führen wir sie aus.

npm lint:scss:fix ausführen

Jetzt sollten Sie eine grüne Ausgabe sehen, bei der keine Fehler gefunden wurden:

stylelint '**/*.scss' --syntax scss --fix -f verbose --color


1 Quelle geprüft

/Benutzer/wojciechbak/Codest/Projekte/github-workflow-demo/assets/scss/styles.scss

0 Probleme gefunden

4. Hinzufügen von ESLint

Dieser Schritt ist fast derselbe wie der vorherige. Wir werden ESLint installieren, einige Standardregeln definieren und zwei aufrufbare NPM-Skripte deklarieren - eines für CI, eines für Pre-Push. Gehen wir das durch!

Wenn Sie NPM bei Ihrer täglichen Arbeit verwenden, möchten Sie vielleicht ESLint global installieren. Wenn nicht, lesen Sie bitte die Installationsanweisungen in offizielle Dokumente.

npm install -g eslint

Wenn der Befehl eslint auf Ihrem Rechner verfügbar ist, führen Sie ihn einfach in Ihrem Projekt aus:

eslint --init

Befolgen Sie die weiteren Anweisungen in Ihrem Terminal und treffen Sie einige Projektentscheidungen, z. B:

  • Javascript oder TypeScript
  • Airbnb-Stil oder Google-Stil
  • Konfigurationstyp (JSON-Datei, JS-Datei oder Inline in paket.json)
  • ES-Module (Import/Export) oder erfordern Syntax

An dieser Stelle lohnt es sich, ein Wort über den Code-Formatierer namens Prettier zu schreiben. Es ist vollständig standardisiert und kompatibel mit den meisten Code-Editoren (z.B. VS Code). Prettier bietet viele vordefinierte Regeln für die Gestaltung von Code, arbeitet mit Linters zusammen und kann eine große Unterstützung bei der Suche nach Top-Qualität des Codes sein. Um zu verstehen, was Prettier genau ist, besuchen Sie diese Seite Vergleich aus den offiziellen Dokumenten.

Wenn dies geschehen ist, wird die ESlint-Konfigurationsdatei (z.B. .eslintrc.json(je nachdem, was Sie vorher gewählt haben) sollte in Ihrem Stammverzeichnis erscheinen, irgendwo neben .stylelintrc.json vorher erstellt.

Jetzt müssen wir Skripte definieren in paket.json Datei, genau wie bei SCSS-Dateien:

"Skripte": {
    "lint:js": "eslint '**/*.js' --ignore-pattern node_modules/",
    "lint:js:fix": "eslint '**/*.js' --ignore-pattern node_modules/ --fix"
}

Herzlichen Glückwunsch! ESLint ist jetzt sofort einsatzbereit. Lassen Sie uns überprüfen, ob es korrekt funktioniert. erstellen /src/index.js Datei mit einigem Inhalt:

console.log("etwas");

Linter ausführen:

npm lint:js ausführen


Die Ausgabe sollte wie folgt aussehen:

> eslint '**/*.js' --ignore-pattern node_modules/

~/Codest/Projects/github-workflow-demo/src/index.js

1:1 warning Unerwartete Konsolenanweisung no-console

✖ 1 Problem (0 Fehler, 1 Warnung)

Diese Warnung wird nicht verschwinden, wenn Sie -fix Option, denn linters hat keinen Einfluss auf potenziell sinnvollen Code. Sie sind nur für das Styling von Codeeinschließlich Leerzeichen, Zeilenumbrüche, Semikolons, Anführungszeichen usw.

5. Definition von GitHub-Workflows

GitHub-Workflows sind eine ziemlich gut dokumentierte Sache. Fühlen Sie sich frei, tiefer in diese zu graben, aber für jetzt, ich werde einen einfachen Workflow implementieren, um unseren Code nach dem Push auf das Remote-Repository (natürlich auf GitHub gehostet) zu lint.

erstellen. /.github/workflows Verzeichnis und neue code-qualität-workflow.yml Datei enthalten, da GitHub-Workflows mit YAML-Dateien definiert werden müssen.

Um einen ordnungsgemäßen Arbeitsablauf durchzuführen, müssen wir einige Fragen beantworten:

  • Wann wollen wir unseren Workflow ausführen (bei Push, bei Pull Request, bei Merge usw.)?
  • Sollen bestimmte Situationen ausgeschlossen werden (z. B. Push-to-Branch-Master)?
  • Welche Umgebung müssen wir einrichten, um unsere Befehle korrekt auszuführen (in diesem Beispiel - Node)?
  • Müssen wir Abhängigkeiten installieren? Wenn ja, wie sollten wir sie zwischenspeichern?
  • Welche Schritte müssen wir unternehmen, um die Prüfung abzuschließen?

Nach einigen Überlegungen und einigen Stunden Arbeit mit docs example .yml Datei kann folgendermaßen aussehen:

Name: Codequalität

Ein: 'Push'

Aufträge:
  Code-Qualität:
    name: Lint Quellcode
    läuft auf: ubuntu-latest
    Schritte:
    - verwendet: actions/checkout@v1

    - Name: Knoten einrichten
      verwendet: actions/setup-node@v1
      mit:
        node-version: '12.1'

    - name: Cache-Abhängigkeiten
      verwendet: actions/cache@v1
      mit:
        Pfad: ./node_modules
        Schlüssel: $(( runner.OS ))-dependencies-$(( hashFiles('**/package-lock.json') ))
        Wiederherstellungs-Schlüssel: |
          $(( runner.OS ))-Abhängigkeiten-$(( env.cache-name ))-
          $(( runner.OS ))-Abhängigkeiten-
          $(( runner.OS ))-

    - name: Abhängigkeiten installieren
      ausführen: |
        npm installieren

    - Name: Lint-Dateien
      ausführen: |
        npm lint ausführen

GitHub stellt alle benötigten Umgebungsdaten zur Verfügung. In der letzten Zeile führen wir den Befehl npm lint ausführen die vorher nicht definiert war:

"Skripte": {
    "lint": "npm run lint:js && npm run lint:scss"
}

Beachten Sie, dass ich in unserem Arbeitsablauf nicht mit :fix Befehle.

Wenn alle diese Schritte erledigt sind, können Sie diese schöne Ausgabe von GitHub genießen, bevor Sie Ihren Pull Request zusammenführen:

Ähnliche Artikel

Enterprise & Scaleups Lösungen

Bewährte Praktiken für den Aufbau eines starken und kohäsiven Teams

Die Zusammenarbeit ist entscheidend für den Erfolg der Softwareentwicklung. Ein starkes Team, das gut zusammenarbeitet, kann bessere Ergebnisse erzielen und Herausforderungen meistern. Um die Zusammenarbeit zu fördern, sind Anstrengungen, Kommunikation und kontinuierliche...

Der Codest
Krystian Barchanski Leiter der Frontend-Einheit
Software-Entwicklung

Wie wird Agile Methodology eingeführt?

Beherrschen Sie die agile Methodik mit Best Practices für eine erfolgreiche Implementierung und ein verbessertes Projektmanagement in der Softwareentwicklung.

DAS SCHÖNSTE

Abonnieren Sie unsere Wissensdatenbank und bleiben Sie auf dem Laufenden über das Fachwissen aus dem IT-Sektor.

    Über uns

    The Codest - Internationales Software-Unternehmen mit technischen Zentren in Polen.

    Vereinigtes Königreich - Hauptsitz

    • Büro 303B, 182-184 High Street North E6 2JA
      London, England

    Polen - Lokale Tech-Hubs

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Warszawa, Polen

      Der Codest

    • Startseite
    • Über uns
    • Dienstleistungen
    • Fallstudien
    • Gewusst wie
    • Karriere
    • Wörterbuch

      Dienstleistungen

    • IT-Beratung
    • Software-Entwicklung
    • Backend-Softwareentwicklung
    • Frontend-Softwareentwicklung
    • Staff Augmentation
    • Backend-Entwickler
    • Cloud-Ingenieure
    • Daten-Ingenieure
    • Andere
    • QS-Ingenieure

      Ressourcen

    • Fakten und Mythen über die Zusammenarbeit mit einem externen Softwareentwicklungspartner
    • Aus den USA nach Europa: Warum entscheiden sich amerikanische Start-ups für eine Verlagerung nach Europa?
    • Tech Offshore Development Hubs im Vergleich: Tech Offshore Europa (Polen), ASEAN (Philippinen), Eurasien (Türkei)
    • Was sind die größten Herausforderungen für CTOs und CIOs?
    • Der Codest
    • Der Codest
    • Der Codest
    • Privacy policy
    • Website terms of use

    Urheberrecht © 2025 von The Codest. Alle Rechte vorbehalten.

    de_DEGerman
    en_USEnglish sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek de_DEGerman