Ich richte derzeit ein automatisiertes Build-Skript ein (mit gruntjs gekennzeichnet sind ) für ein require.js getriebenes Projekt. Daher möchte ich jslint / jshint mit allen erforderlichen Dateien versehen haben, bevor sie verkettet und mit r.js verkleinert werden. Da der Ordner js viele Entwicklungsdateien enthält, die ich nicht fusseln möchte, kann ich js/**/*.js
nicht einfach an JSLint übergeben. Mein erster Gedanke war, r.js mit optimizer: 'none'
auszuführen, die verkettete Datei zu schließen und dann zu verkleinern, aber dies ist aus zwei Gründen keine Option. Zuerst wird es Vendor-Bibliotheken enthalten, die ich nicht lint und zweitens die Zeile mit dem Fehler finden, seine Klasse finden, die entsprechende js-Datei im dev-Ordner finden, sie dort reparieren, r.js erneut ausführen und schließlich flinten Auch das ist viel zu mühselig für unseren Workflow. Also suche ich nach einer Möglichkeit, den linting in den r.js optimizer-Prozess einzubinden oder zumindest eine Liste der requires dependency tree in irgendeiner Weise zu bekommen, die ich parsen und an lint übergeben kann. Oder irgendeine Lösung, die für einen automatisierten Prozess praktikabel ist, werden Sie finden.
Diese Antwort umgeht Grunt, aber es sollte für das funktionieren, was Sie tun möchten. Die Art, wie ich es tun würde, ist r.js zu betrachten und zu versuchen, eine Funktion zu überschreiben, die den Pfad zu den verschiedenen geladenen Modulen erhält, den Modulnamen abfängt und die Dateien lint, während r.js die Module lädt und kompiliert. Ich habe es so gemacht:
%Vor%Wenn Sie requirejs.optimize für Ihre Module ausführen, sollten Sie alle nicht leeren JavaScript-URLs abrufen, die in der Konsole protokolliert wurden. Anstatt sie auf der Konsole zu protokollieren, könnten Sie die URLs verwenden, um die Dateien zu filtern.
Flicken Sie zuerst, kompilieren Sie später. Seien Sie genau über die Dateien, die Sie flinken möchten und verwenden Sie die! Präfix, um bestimmte Dateien zu ignorieren:
%Vor%Ich bevorzuge es, die Methoden von r.js nicht zu überschreiben, oder Sie könnten eine unerwünschte Abhängigkeit von einer bestimmten Version erzeugen (Sie müssen Ihren Code aktualisieren, falls sich r.js ändern sollte)
Dies ist der Code, den ich für den gleichen Zweck benutze, indem ich die onBuildRead-Funktion von require benutze und die Tatsache, dass Objekte in Javascript als Referenz übergeben werden. Ich stelle sicher, dass ich zuerst das require-Build und dann die js-Dateiquellen lint.
Der Nachteil ist, dass Sie nach Abschluss der Erstellung flinken. Für mein Setup ist das kein Problem.
%Vor% Anstatt den lint
-Task zu verwenden, installieren, laden und richten Sie grunt-contrib-jshint ein . Es verfügt über die Option ignores
, um bestimmte Dateien oder Dateipfadmuster zu ignorieren.
Hier ist meine Aufgabe:
%Vor%Tags und Links javascript requirejs jslint jshint gruntjs