Ich habe dieses Problem ursprünglich in den zusätzlichen TSLint-Regeln von Microsoft gemeldet , aber vielleicht ist es hier besser gemeldet:
TSLint funktioniert einwandfrei, übernimmt aber nicht die von diesem Modul bereitgestellten Regeln. Folgendes habe ich getan:
npm install tslint-microsoft-contrib --save-dev
tslint.json
"rulesDirectory": "node_modules/tslint-microsoft-contrib" als Root-Eigenschaft hinzugefügt.package.json
, wo ich dies als NPM-Skript für die Eigenschaft script
ausführe, habe ich tslint --rules-dir node_modules/tslint-microsoft-contrib index.js
tslint.json
hinzugefügt, die dieses Modul in der Eigenschaft rules
bereitstellt.Unterm Strich konnte ich dies nicht mein Leben lang zum Laufen bringen, wenn ich dies in einem NPM-Skript verwende. Ist das das Problem? Können Sie diese Regeln im Zusammenhang mit der Ausführung innerhalb von NPM einfach nicht aufgreifen? Jede Hilfe wäre dankbar. Vielen Dank.
@cerebrl Welche Version von TSLint verwenden Sie? Ich würde empfehlen, v3.2.1
wenn Sie noch nicht dabei sind.
Die Eigenschaft --rules-dir
oder rulesDirectoy
sollte auf das Verzeichnis mit den _built_ .js
Regeldateien zeigen. Ich weiß, dass dies zunächst nicht offensichtlich sein kann.
Ich habe das gleiche Problem und habe ein Repo erstellt, in dem es sich manifestiert. Ich verwende tslint 3.2.1.
Hier ist meine package.json:
https://github.com/janjarfalk/ionic2-angular2-typescript-boilerplate/blob/master/package.json
Hier ist meine tslint.json:
https://github.com/janjarfalk/ionic2-angular2-typescript-boilerplate/blob/master/tslint.json
Die "export-name-rule" wird nicht übernommen. Wenn ich npm starte, starte lint
Ich denke, dies ist ein Fehler in der Art und Weise, wie TSLint mit Pfaden umgeht - wir arbeiten jetzt daran, ihn zu beheben. In der Zwischenzeit werden die Dinge korrekt funktionieren, wenn Sie TSLint global installieren und einfach tslint -s tslint/formatters -t color --config tslint.json app/{pages,services}/**/*.ts
von der Befehlszeile ausführen, erhalten Sie die richtigen Ergebnisse.
Ich denke , der Grund , warum es nicht für Leute arbeitet mit NPM - Skripten ist , dass der tslint
Befehl in einer npm Skript Referenzen node_modules/.bin/tslint
, so dass es zu suchen versucht node_modules/.bin/tslint/node_modules/tslint-microsoft-contrib
und doesn finde keine benutzerdefinierten Regeln.
Ich habe #910 und #911 eingereicht, um diese Erfahrung zu verbessern.
Ich habe dies ohne Probleme im Repo von @janjarfalk zum
Ich musste sein Skript ändern in:
"scripts": {
"lint": "tslint -s tslint/formatters -t color --config tslint.json app/**/*.ts -r node_modules/tslint-microsoft-contrib/",
"validate": "npm ls"
},
Die Option -r hat die zusätzlichen Regeln übernommen und das **-Glob (anstelle des {pages,services}-Globs) die .ts-Dateien.
Zwei Leute haben jetzt versucht, tslint-Optionen in die Datei rules.json einzufügen... was nicht funktioniert. Vielleicht ist es eine gute Idee, dies in der Readme zu klären.
Eigentlich @ HamletDRC , theoretisch sollte es funktionieren. Im Moment gibt es jedoch einige seltsame Fehler bei der Handhabung relativer Pfade. Ich habe das hoffentlich alles in https://github.com/palantir/tslint/pull/912 behoben :)
Ich möchte diesen Thread mit der Info aktualisieren, dass jetzt alles funktioniert.
Ich habe die Eigenschaft "rulesDirectory": "node_modules/tslint-microsoft-contrib"
aus tslint.json
und verwende einfach den Befehl -r
, um auf node_modules/tslint-microsoft-contrib
.
Ich kann bestätigen, dass, zumindest für mich, das Hinzufügen der Eigenschaft rulesDirectory
wieder zu tslint.json
das hier gemeldete ursprüngliche Problem zuverlässig erzeugt.
Danke an alle für die Hilfe!
@cerebrl @janjarfalk : Wir haben gerade TSLint v3.2.2 veröffentlicht, das diesen Fehler beheben sollte. Wenn Sie in der Befehlszeile ein Verzeichnis für benutzerdefinierte Regeln angeben, wird der Pfad relativ zum aktuellen Arbeitsverzeichnis behandelt (wie zuvor). Wenn Sie jedoch einen Pfad in einer tslint.json
Datei angeben, ist der Pfad jetzt relativ zum Speicherort der tslint.json
Datei (was meiner Meinung nach die Dinge viel intuitiver macht.)
Ich habe Ihr Repo mit v3.2.2 @janjarfalk durchgesehen und getestet und festgestellt, dass das Ausführen von npm run lint
jetzt wie erwartet funktioniert. Probieren Sie es selbst aus und lassen Sie es mich wissen, wenn Sie auf Fehler oder Probleme stoßen!
@JKillian : Danke!
Aber ich glaube, Sie haben einen Fehler eingeführt.
Das Pfad-Array funktioniert nicht wie erwartet.
"rulesDirectory": ["node_modules/tslint-microsoft-contrib"]
// Works as expected.
"rulesDirectory": ["tslint/rules"]
// Works as expected.
"rulesDirectory": ["node_modules/tslint-microsoft-contrib", "tslint/rules"]
// Warnings from `tslint-microsoft-contrib` ONLY.
"rulesDirectory": ["tslint/rules", "node_modules/tslint-microsoft-contrib"]
// Warnings from `tslint/rules` ONLY.
@janjarfalk Interessant, obwohl ich nicht davon überzeugt bin, dass dies ein Fehler ist. Sobald TSLint einen ungültigen Pfad findet, wirft es einen Fehler und bricht ab. Ich bin mir nicht sicher, ob es sich für mich lohnt, etwas Ausgefalleneres zu tun... Glaubst du, ein anderes Verhalten wäre besser?
Ich glaube, du hast es falsch verstanden. Sowohl tslint/rules
als auch node_modules/tslint-microsoft-contrib
sind gültige Pfade. Im Moment nimmt es nur zusätzliche Regeln aus dem ersten Pfad im Array auf.
"rulesDirectory": ["node_modules/tslint-microsoft-contrib"]
// If this result in warnings...
"rulesDirectory": ["tslint/rules"]
// ...and this doesn't result in any warnings.
"rulesDirectory": ["tslint/rules", "node_modules/tslint-microsoft-contrib"]
// I still expect this to result in warnings, but it doesn't.
Ich habe dieses Repo https://github.com/janjarfalk/ionic2-angular2-typescript-boilerplate.git mit einem Setup aktualisiert, das das Problem reproduziert, wenn npm run lint
.
// tslint.json
{
"rulesDirectory": ["node_modules/tslint-microsoft-contrib", "tslint/rules"],
"rules": {
"missing-jsdoc": true, // A rule form Microsoft
"export-class-name": true // A rule from me (tslint/rules folder)
}
}
// ACUTAL output
app/MyApp.ts
-- [1, 1] - File missing JSDoc comment at the top-level: app/MyApp.ts
// EXPECTED output
app/MyApp.ts
-- [1, 1] - File missing JSDoc comment at the top-level: app/MyApp.ts
app/pages/page1/page1.ts
-- [1, 1] - The exported module name must match the file name. Found: app/pages/page1/page1.ts and Page1
// tslint.json
{
"rulesDirectory": ["tslint/rules", "node_modules/tslint-microsoft-contrib"],
"rules": {
"missing-jsdoc": true, // A rule form Microsoft
"export-class-name": true // A rule from me (tslint/rules folder)
}
}
// ACTUAL output
app/pages/page1/page1.ts
-- [1, 1] - The exported module name must match the file name. Found: app/pages/page1/page1.ts and Page1
// EXPECTED output
app/MyApp.ts
-- [1, 1] - File missing JSDoc comment at the top-level: app/MyApp.ts
app/pages/page1/page1.ts
-- [1, 1] - The exported module name must match the file name. Found: app/pages/page1/page1.ts and Page1
Danke für die ausführliche Erklärung @janjarfalk , ich habe dich tatsächlich falsch verstanden. Das scheint definitiv ein Bug zu sein, ich werde mich darum kümmern!
Das ist ein separates Problem, ich habe Nr. 928 dafür eingereicht.
@janjarfalk Dies sollte jetzt in v3.3.0 behoben sein. Lassen Sie es uns wie immer wissen, wenn Sie auf andere Probleme stoßen :smiley:
@JKillian Genial ! Wird besorgt! Freue mich zu helfen!
Es kann jemandem weiterhelfen: Nachdem ich die Quelle gelesen hatte, habe ich erfahren, dass benutzerdefinierte Regeln wie folgt geladen werden:
require
laden"foo-bar": true
in tslint.json führt also zu einem require('yourRulesDirectory/fooBarRule.js')
@alexanderbird , das hauptsächlich im Abschnitt "Wichtige Konventionen" auf der README- und Docs-Site behandelt werden sollte . offen für PRs, wenn Sie der Meinung sind, dass die Dokumentation verbessert werden könnte.
@alexanderbird Danke! Ich habe zunächst hier https://github.com/mgechev/codelyzer gesucht und keine Anweisungen für Namenskonventionen gefunden. Sobald ich den Namen meiner Regel geändert habe, hat es funktioniert! Wahrscheinlich gibt es zu beiden Projekten ein Doc-Update, das notwendig ist.
🤖 Beep boop! 👉 TSLint ist veraltet 👈 und Sie sollten zu typescript-eslint wechseln ! 🤖
🔒 Dieses Problem wird gesperrt, um weitere unnötige Diskussionen zu vermeiden. Dankeschön! 👋
Hilfreichster Kommentar
Es kann jemandem weiterhelfen: Nachdem ich die Quelle gelesen hatte, habe ich erfahren, dass benutzerdefinierte Regeln wie folgt geladen werden:
require
laden"foo-bar": true
in tslint.json führt also zu einemrequire('yourRulesDirectory/fooBarRule.js')