Tslint: Fahrplan: TSLint -> ESLint

Erstellt am 23. Feb. 2019  ·  52Kommentare  ·  Quelle: palantir/tslint

Wie Sie vielleicht in diesem Blogbeitrag gelesen haben, planen wir, TSLint im Jahr 2019 abzuschaffen und die Migration zu ESLint als Standard-Linter für TypeScript und JavaScript zu unterstützen. Dies wird keine sofortige Abwertung sein; Im Gegenteil, es gibt viel zu tun, um einen reibungslosen Übergang auf das neue Tooling ohne Rückschritte zu gewährleisten. Es gibt Funktionen, Testsuiten und Annehmlichkeiten in TSLint, die wir hoffentlich bei der Migration beibehalten werden. Es kann einen Zeitraum geben, in dem es Überschneidungen zwischen den beiden Tools gibt, und TSLint-Early-Adoptern wird empfohlen, _beide_ Linters auszuführen, um eine vollständige Codeprüfungsabdeckung sicherzustellen (in einem angemessenen Maße, damit die Leistung nicht drastisch leidet).

Ich werde einige Funktionsanfragen in diesem Repo schließen, die sich jetzt außerhalb des Geltungsbereichs befinden, da wir erwarten, dass sie in der ESLint / typescript-eslint- Roadmap behandelt werden. Ein Beispiel für eine Kategorie von Regeln, für die __Anfragen für neue Funktionen__ höchstwahrscheinlich geschlossen/abgelehnt werden, sind Formatierungsregeln . Ich habe schon seit geraumer Zeit vorgeschlagen, diese Regeln aufzuteilen, weil wir Prettier bei Palantir verwenden und es für ein besseres Tool zum Formatieren von Code halten.

TSLint wird weiterhin wichtige Fehlerbehebungen und Updates veröffentlichen, die es mit den neuesten Compiler-/Sprachfunktionen auf dem neuesten Stand halten.


Update (Juni 2019): eine konkretere Roadmap-Zeitachse, koordiniert mit @JoshuaKGoldberg und tslint-contrib-microsoft:

  • __1. August 2019__: Hören Sie auf, neue _Kernregeln_ zu akzeptieren. Akzeptieren Sie weiterhin Fehlerkorrekturen, kleinere Funktionen und Regelverbesserungen. Benutzerdefinierte Regeln sind immer eine Option und können außerhalb dieses Repositorys gepflegt werden.
  • __1. November 2019__: Akzeptieren Sie keine Funktions- oder Regelerweiterungen mehr (mit Ausnahme von solchen, die die Migration zu typescript-eslint erleichtern). Akzeptiere weiterhin Fehlerkorrekturen.
  • __1. Januar 2020__: Akzeptieren Sie nichts mehr außer Sicherheitskorrekturen und Korrekturen für Abstürze, die durch fehlerhafte TypeScript-Änderungen verursacht wurden.
  • __1. Dezember 2020__: Nimm keine PRs mehr an 🎉

Update (August 2019): siehe tslint-to-eslint-config für einen CLI-Befehl, der TSLint-Konfigurationsdateien in ESLint-Konfigurationsdateien migriert.


Update (März 2020): _"und Korrekturen für Abstürze, die durch fehlerhafte TypeScript-Änderungen eingeführt wurden"_ zur Frist vom 1. Januar hinzugefügt, nach der Diskussion in #4914.

Documentation

Hilfreichster Kommentar

Ich wäre großartig, wenn ich einen CLI-Befehl hätte, der eine tslint.json in eine eslint.json migriert und gleichwertige Regeln und Optionen abbildet. Idealerweise würde es Regeln entfernen, die aus tslint.json migriert werden können, und Regeln behalten, die noch kein Äquivalent haben (oder die verwendeten Optionen nicht unterstützen), sodass die Regel im Laufe der Zeit wiederholt idempotent ausgeführt werden kann, bis tslint.json leer wird irgendwann und wir können uns voll und ganz auf ESLint verlassen.

Alle 52 Kommentare

Ich wäre großartig, wenn ich einen CLI-Befehl hätte, der eine tslint.json in eine eslint.json migriert und gleichwertige Regeln und Optionen abbildet. Idealerweise würde es Regeln entfernen, die aus tslint.json migriert werden können, und Regeln behalten, die noch kein Äquivalent haben (oder die verwendeten Optionen nicht unterstützen), sodass die Regel im Laufe der Zeit wiederholt idempotent ausgeführt werden kann, bis tslint.json leer wird irgendwann und wir können uns voll und ganz auf ESLint verlassen.

Gute Nachrichten.
Die Leute von ESLint haben bereits ein Typoskript-Eslint- Projekt gestartet, um TS zu unterstützen.
Auch sie suchen Hilfe. Hier ist die Aussage. .

Was bedeutet das Schreiben von tslint-Regeln nach der Migration?

Gibt es Pläne, eslint von JS zu TS zu migrieren? Ich sage es nur ungern, aber wenn eslint nicht nach ts migriert wird, wäre es nicht so angenehm, Regeln zu schreiben.

Mein Fehler, es ist nicht eslint, das wir verwenden werden, wir werden Typoskript-eslint verwenden, das macht mehr Sinn. lassen Sie mich wissen, wenn ich Ihnen helfen kann.

Wäre es möglich, auf diesen Plan zu verweisen, um ihn aus der readme.md im Repo zu verwerfen? Es scheint, dass nur bestimmte Leute von diesem Plan wissen und nicht allgemein bekannt sind. Danke!

@joeyj-msft in der Tat, hinzugefügt in a395501739bf7f0f166e5b0ccb355c0e9500445a von adidahiya.

Es wäre schön, einige "Zusammenfassungen" der TSLint-Regeln (https://palantir.github.io/tslint/rules/) in typescript-eslint verfügbar zu haben. Ich weiß nicht, ob es ein "ESLint"-Flag auf Palantir oder eine neue Liste auf https://github.com/typescript-eslint/typescript-eslint sein sollte. Aber es würde helfen zu entscheiden, ob ein Projekt bereit ist, sich zu bewegen oder nicht.

@JoshuaKGoldberg Ich wechsle von tslint zu typescript-eslint. Ich habe TSLint verwendet, um benutzerdefinierte Regeln für mein Projekt zu erstellen. Wie kann ich beim Erstellen benutzerdefinierter Regeln fortfahren, wie wir es in TSLint getan haben?

Mein Projekt erstellt sowohl Javascript- als auch Typescript-Dateien, sodass ich nur eine einzige Regel für sie erstellen muss?

@moulikcipherX Danke fürs Stellen, tolle Fragen!

Sie können Ihre TSLint-Regeln innerhalb von ESLint verwenden, indem Sie typescript -eslint/packages/eslint-plugin-tslint verwenden . Es umschließt eine TSLint-Konfiguration und lint Ihren Code mit TSLint.

Um Regeln in ESLint zu schreiben, siehe typescript-eslint/packages/eslint-plugin . Diese README.md enthält eine Liste aller ihrer unterstützten Regeln _(die Liste ist ziemlich groß geworden!)_. Die dortige ROADMAP.md hat eine Zuordnung bestehender TSLint-Regeln zu den neuen Äquivalenten.

Danke @JoshuaKGoldberg.

Daher kann ich weiterhin dieselben Methoden zum Erstellen benutzerdefinierter Regeln für TypeScript verwenden wie in TSLint.

Hinweis: Ich habe gerade den ursprünglichen Beitrag in diesem Thread mit einer konkreteren Roadmap-Zeitachse aktualisiert. Scrollen Sie zum Anfang dieser Seite, um sie anzuzeigen.

Äh, sollte der Blogpost nicht auch in https://github.com/palantir/tslint/tree/gh-pages/_posts sein und von https://github.com/palantir/tslint/blob/master/ verlinkt sein?

@SamB Der Blog auf der gh-pages-Website ist ziemlich veraltet, wir haben ihn nicht aktualisiert. Und der Blogbeitrag ist oben in der README verlinkt.

@adidahiya @JoshuaKGoldberg
Ich möchte zum Typoskript-Eslint-Projekt beitragen, also wo soll ich anfangen?

Wird die entsprechende Umwandlung von benutzerdefinierten Tslint-Regeln in benutzerdefinierte Eslint-Regeln in Zukunft unterstützt typescript-supported-eslint ?

Was ich versuche zu sagen, ist ein bestimmter CLI-Befehl, um die JS-Dateien von custom-tslint-rule in entsprechende eslint-kompatible Linting-Regeln zu konvertieren. Es wird sehr hilfreich sein, die Regel von tslint in eslint umzuwandeln, wird eine wirklich harte Aufgabe sein ...

Vielen Dank, dass Sie ein so brillantes Tool entwickelt haben, und ich wünsche Ihnen alles Gute für Ihre zukünftigen Abenteuer. Apropos Abenteuer, das war sicherlich eines, oder?

Trotzdem alles Gute für dich,
Wille

Da wir uns dem Ende von 2019 nähern (dem Jahr, in dem dieses Repo angeblich veraltet war), könnte jetzt ein guter Zeitpunkt sein, das veraltete Flag in NPM hinzuzufügen, damit neue Installationen an ESLint geleitet werden.

Es wäre auch nützlich, die Readme-Mitteilung etwas offensichtlicher zu machen (oberste Ebene) und Benutzer zu typescript-eslint zu verlinken.

Planen Sie dies jetzt, da fast jeder gängige Anwendungsfall von ESLint abgedeckt wurde?

Ich denke und hoffe auch, dass, wenn tslint veraltet ist, eslint mehr Druck bekommt und die Community sich mehr darauf konzentriert

tslint-to-eslint-config hilft dabei, tslint.json in .eslinerc.js umzuwandeln, kann es aber nicht
kann sich nicht um Inline tslint:disable:<rule> kümmern, außerdem sind einige Regeln nicht gut konfiguriert oder werden von eslint noch nicht unterstützt.

Es gibt immer noch einige Vorteile bei der Migration von tslint zu eslint, was ist der Vorteil, eslint für Typoskript-Dateien zu verwenden? Um eine bessere Konsistenz zwischen der Typoskript-Community und der Javascript-Community zu erreichen?
Wenn ein Projekt nur Typoskript und überhaupt keine Javascript-Dateien verwendet, gibt es nach der Migration noch Vorteile?

tslint-to-eslint-config hilft dabei, tslint.json in .eslinerc.js umzuwandeln, kann es aber nicht
kann sich nicht um Inline tslint:disable:<rule> kümmern

In der Tat: https://github.com/typescript-eslint/tslint-to-eslint-config/issues/136
Sie können gerne mitmachen, um es hinzuzufügen, wenn Sie möchten! Es gibt eine in Arbeit befindliche PR unter https://github.com/typescript-eslint/tslint-to-eslint-config/pull/246 , die etwas Hilfe gebrauchen könnte.

Es gibt immer noch einige Vorteile bei der Migration von tslint zu eslint, was ist der Vorteil, eslint für Typoskript-Dateien zu verwenden?

Sie können die Gründe sehen, die in dem oben in diesem Thread erwähnten Blogbeitrag aufgeführt sind.

@beenotung

TSLint war im Vergleich zu ESLint schon immer eingeschränkt, es gibt eine ganze Reihe von Regeln, die es nie gab, die ESLint hatte. Ganz zu schweigen von den Plugins und der viel größeren Community/Unterstützung, die ESLint immer hatte. Darüber hinaus haben viele von uns ein gut konfiguriertes eslintrc , das wir überall verwenden, wodurch jedes TSLint-Projekt zu einer Inkonsistenz wird, die behoben werden muss (durch die Verwendung eines nicht veralteten Tools).

Wenn etwas in ESLint fehlt, das TSLint hat, ist es besser, es zu erhöhen, damit es implementiert werden kann, als weiterhin ein veraltetes Tool zu verwenden.

Vielen Dank, dass Sie mehr Kontext für eslint bereitgestellt haben. Ich sehe den Vorteil der Verwendung von eslint.

Ich habe tatsächlich versucht, von tslint nach eslint zu migrieren, aber es scheint, dass einige Kanten nicht einfach behoben werden können, da eslint das Konzept des Typs nicht hat (daher ist die Einrückung für den generischen Typ defekt).

In Bezug auf Tooling-Unterstützung auf eslint (insbesondere IDE-Hinweise zur Konfigurationsdatei). Ich wünschte, ich könnte eines Tages etwas beitragen, aber ich bin derzeit weder erfahren noch frei, daran zu arbeiten. (Zumindest steht es nicht ganz oben auf meiner Liste, denn tslint funktioniert immer noch gut)

Es scheint, dass der weniger schmerzhafte Weg darin besteht, tslint für Typoskript-Dateien und eslint für Javascript-Dateien zu verwenden, damit beide Welten ihre "Konsistenz" genießen können.

Da npm angibt, dass TSLint veraltet ist und stattdessen ESLint verwendet , gehe ich davon aus, dass die Migration abgeschlossen ist.
Sollte dieses Thema nicht geschlossen werden?

@cdalexndr Es ist immer noch nützlich, dieses Problem offen zu haben, damit die Leute mehr über die Gründe für die Ablehnung erfahren und die neuesten Updates lesen können.

Der obige Blogbeitrag konzentriert sich nicht auf technische Details zu typescript-eslint .
TSLint-Benutzer können mehr darüber lesen unter Wie funktioniert typescript-eslint ?

Im Allgemeinen enthält die gesamte Typoskript-eslint/README- Datei alles Notwendige für einen transparenten Übergang.

Gibt es einen Grund, warum das Paket selbst auf npm nicht als veraltet markiert ist? Wie zB Anfrage ?

@niklasR Version 6.0.0 wurde in NPM als veraltet markiert und dann brach die Hölle los.

Schauen Sie sich #4919 und #4914 an.

Wir _möchten_ aber losbrechen 😛 ... die Leute sollten aufhören, TSLint zu benutzen.

Sieht so aus, als hätten wir die neuen Versionen einfach nie explizit als veraltet markiert; siehe die Versionsgeschichte auf https://www.npmjs.com/package/tslint :
Screenshot showing 6.0.0 as deprecated on npm but later versions not

Ich habe keine Berechtigungen - @adidahiya ?

Oh, seltsam, ich dachte, die Dokumentation hier deutete an, dass dieser Befehl alle potenziellen zukünftigen Versionen verwerfen würde, die in den Bereich fallen:

npm deprecate tslint@^6.0.0 "TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information."

... aber ich nehme an, das ist nicht der Fall. Ich bin weitergegangen und habe die neueren abgelehnt.

@adidahiya Danke, ich habe hier ein Problem in den NPM-Dokumenten eröffnet: https://github.com/npm/cli/issues/1165

Sollen die älteren Versionen auch veraltet sein? Ähnlich wie Anfrage funktioniert es ?

Der Grund, warum ich frage, ist, dass wir unsere Pakete nach ESLint migrieren möchten, aber TSLint ^5 ziemlich häufig verwenden und es schön wäre, unseren bestehenden Prozess zu verwenden, um einfach unsere (300+) Repos zu scannen Verfallshinweise, um alle zu kennzeichnen, die migriert werden müssen.

Veraltete Versionen galten immer und nur für vorhandene Versionen; Wenn Sie möchten, dass neue Versionen veraltet sind, müssen Sie sie nach der Veröffentlichung immer manuell verwerfen.

Es wäre nicht schön, wenn die Benutzer auf der Github-Seite https://palantir.github.io/tslint/?

Es wäre nicht schön, wenn die Benutzer auf der Github-Seite https://palantir.github.io/tslint/?

Genau darauf habe ich gewartet! Bitte jemand, der einige klare Schritt-für-Schritt-Anleitungen für die Migration von tslint zu eslint präsentiert

Die TSLint-Dokumentationswebsite wurde seit einiger Zeit nicht mehr aktualisiert, aber die README-Datei dieses Repos ist auf dem neuesten Stand und es gibt eine Menge nützlicher Informationen, einschließlich einer Schritt-für-Schritt-Anleitung für die Migration, in der Typescript-eslint-README .

Fix für die Fehlermeldung
[https://stackoverflow.com/questions/61605380/angular-9-issue-unable-to-run-the-initial-application]
npm installiert chokidar
npm cache clean --force
npm install -g @angular/ cli@latest

install error
Hallo Angular-Team, ich bin neu bei Angular, bitte helfen Sie mir bei dem Fehler, den ich bekomme, wenn ich versuche, ein neues Projekt zu erstellen.

Danke schön.

Hallo Angular-Team, ich bin neu bei Angular, bitte helfen Sie mir bei dem Fehler, den ich bekomme, wenn ich versuche, ein neues Projekt zu erstellen.

Danke schön.

Sie sind am falschen Ort
Das ist palantir und nicht angular
Bitte erstellen Sie ein Problem unter https://github.com/angular/angular/issues
Oder noch besser, schauen Sie nach, ob es bereits ein Problem gibt, das sich mit diesem Problem befasst
Ich helfe gerne, wir sehen uns

So verblüfft ich auch bin, dass sie „hier“ um Angular-Hilfe bitten. Ich bin ziemlich beeindruckt, dass ihr Logo wie die britische Steckdose aussieht.

@JoshuaKGoldberg Danke!

Es sollte auch der Tag kommen, an dem Sie dieses Repository archivieren/sperren.

Es sollte nie wieder eine Codeänderung erforderlich sein. Wenn jemand jetzt einen Fehler findet, besteht die Lösung darin, ESLint zu verwenden, anstatt dieses längst veraltete Projekt auszugraben.

Es ist schön zu sehen, dass die meisten Leute jetzt versuchen, davon wegzukommen, aber je expliziter es ist, dies aufzugeben, desto besser.

Ich denke, ts-lint sollte ab September 2020 nicht mehr anstelle von eslint verwendet werden

Wenn Ihr Projekt immer noch ts-lint verwendet, ziehen Sie die Verwendung in Betracht
Überprüfen Sie https://github.com/typescript-eslint/tslint-to-eslint-config

aber typescript-eslint sagt nicht wirklich, was falsch ist https://github.com/typescript-eslint/typescript-eslint/blob/master/docs/getting-started/linting/FAQ.md#why -dont-i-see -typescript-errors-in-my-eslint-output

😢

aber typescript-eslint sagt nicht wirklich, was falsch ist https://github.com/typescript-eslint/typescript-eslint/blob/master/docs/getting-started/linting/FAQ.md#why -dont-i-see -typescript-errors-in-my-eslint-output

😢

Ich denke, das gilt mehr oder weniger sogar für TSLint, und warum rufen wir auch mit TSLint in unseren Linting-Skripten auch tsc --noEmit auf.

Ich habe eine neue Winkel-App mit Version 8 generiert und sie hat standardmäßig tslint mitgeliefert. Ich habe begonnen, ts config für die Husky-Implementierung zu verwenden. Meine Frage ist, ist es zwingend erforderlich, wie empfohlen zu Typoskript-Eslint zu wechseln, da ich in den kommenden Jahren Angular 8 in meinem Projekt verwenden werde?

@mayankkalbhor Wie Sie gesehen haben, ist die Standardeinstellung bei Angular immer noch die Verwendung von TSLint. Ich glaube, es wird bis Angular 11 oder später dauern, bis alle Standardkonfigurationen in Angular CLI für ESLint konfiguriert sind, siehe Roadmap: https://angular.io/guide/roadmap#migration -to-eslint.

Wenn Sie bereits etwas eingerichtet haben, müssen Sie dies selbst migrieren, während Sie nichts wirklich dazu zwingt, ESLint anstelle von TSLint zu verwenden. Es ist ganz Ihre eigene Wahl. Wenn Sie die Funktionen in ESLint bevorzugen oder Zeit damit verbringen möchten, Ihre Regeln wirklich zu konfigurieren, ist die Migration vielleicht der richtige Weg für Sie. Wenn Sie jedoch keine Zeit damit verbringen, Ihre TSLint-Regeln zu konfigurieren und mit ihnen zufrieden sind, können Sie sie unbegrenzt weiter verwenden. Erwarten Sie nur nicht unendlich viele Fehlerbehebungen und überhaupt keine Funktionsaktualisierungen.

Ich glaube, der Standardpfad für Angular-Entwickler besteht darin, darauf zu warten, dass Angular Migrationsskripte in ein zukünftiges Angular-Upgrade einbezieht, wahrscheinlich von Angular 10 auf 11 oder 11 auf 12.

Es steht jedoch jedem frei, einfach selbst zu ESLint zu migrieren. Der einzige wirkliche Blocker für Sie, wenn Sie selbst migrieren, ist, wenn Sie die Zeit haben und es Ihnen nichts ausmacht, die Funktionen zu verlieren, die derzeit in gleichwertigen ESLint-Konfigurationen nicht vorhanden sind. Wo es zuvor einige Linting-Konfigurationen durch Codelyzer gegeben hat und wir hier jetzt einen bevorstehenden Ersatz haben: angle-eslint

Da wir das EOL der Software erreichen, wäre es großartig, wenn jedes Regeldokument einen Link zur Ersetzungsregel in der Typoskript-Eslint-Dokumentation hätte, genau wie Typoskript-Eslint es umgekehrt tut.

Bedeutet dies, dass ich tslint nach dem 1. Januar 2021 nicht mehr in meinen Projekten verwenden kann? Derzeit verwenden meine Builds tslint. Ich sehe keinen Befehl zum Installieren von tslint auf der npm-Website. Und es heißt, tslint sei jetzt veraltet. Kann bitte jemand auf meine Fragen eingehen?

Danke schön.

Sie können es verwenden, aber Sie erhalten in keiner Weise Unterstützung.
Auch keine Updates mehr.
Also ja, Sie sollten mit Eslint fortfahren.

Als letzte Prüfung unterstützt tslint mehr Arten der automatischen Reparatur, daher empfehle ich, 'tslint --fix' auszuführen, bevor eslint ausgeführt wird.

Es kann sich inzwischen etwas geändert haben.

Ich werde es sortieren, dass Code ya

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen