Angenommen, Sie underscore.js
erstellen ein Projekt auf Backbone oder was auch immer und müssen Skripte in einer bestimmten Reihenfolge laden, z. B. müssen sie zuvor geladen werden backbone.js
.
Wie kann ich die Skripte so zusammenfassen, dass sie in Ordnung sind?
// JS concat, strip debugging and minify
gulp.task('scripts', function() {
gulp.src(['./source/js/*.js', './source/js/**/*.js'])
.pipe(concat('script.js'))
.pipe(stripDebug())
.pipe(uglify())
.pipe(gulp.dest('./build/js/'));
});
Ich habe die richtige Reihenfolge der Skripte in meinem source/index.html
, aber da die Dateien in alphabetischer Reihenfolge organisiert sind, konzentriert sich gulp underscore.js
danach backbone.js
und die Reihenfolge der Skripte in meinem source/index.html
spielt keine Rolle. Es werden die Dateien im Verzeichnis angezeigt .
Hat jemand eine Idee dazu?
Beste Idee , die ich habe , ist die Kreditoren Skripte umbenennen 1
, 2
, 3
ihnen die richtige Reihenfolge zu geben, aber ich bin nicht sicher , ob ich so.
Als ich mehr erfuhr, fand ich, dass Browserify eine großartige Lösung ist. Es kann zunächst schmerzhaft sein, aber es ist großartig.
quelle
require
im Front-End zu verwenden, denn wenn Sie npm auf Ihrer Serverseite verwendet haben, sehen Sie natürlich, wie Sie Module benötigen können, aber browserify ermöglicht es Ihnen, dies auf dem clientseitigen Code zu tun Um loszulegen, muss man ein wenig basteln, aber es befindet sich hauptsächlich in package.json und wenn Sie es mit gulp.js oder grunt.js verwenden möchten. Wenn Sie das gulp / grunt browserify-Paket installieren, können Siegulp/grunt browserify
Ihr Skript ausführen und in ein Hauptskript verwandeln. Dies ist eine leichte Lernkurve, aber es lohnt sich IMO.browserify
fürAngular
Module nicht wirklich benötigen , bei denen einfache Verkettung funktioniert und die Reihenfolge keine Rolle spielt :)Antworten:
Ich hatte kürzlich ein ähnliches Problem mit Grunt beim Erstellen meiner AngularJS-App. Hier ist eine Frage, die ich gepostet habe.
Am Ende habe ich die Dateien explizit in der Reihenfolge in der Grunt-Konfiguration aufgelistet. Die Konfigurationsdatei sieht dann folgendermaßen aus:
Grunt kann herausfinden, welche Dateien Duplikate sind und diese nicht enthalten. Die gleiche Technik funktioniert auch mit Gulp.
quelle
Eine andere Sache, die hilft, wenn Sie einige Dateien benötigen, um nach einem Blob von Dateien zu kommen , ist das Ausschließen bestimmter Dateien von Ihrem Glob, wie folgt:
Sie können dies mit der Angabe von Dateien kombinieren, die an erster Stelle stehen müssen, wie in Chad Johnsons Antwort erläutert.
quelle
src
und meinen Code einzufügen.build
Ich habe gesehen, wie Sie diese Syntax verwendet haben. Am Ende habe ich diesen Teil gelöscht, weil ich nicht genau wusste, warum ich ihn brauchte. Das macht jetzt Sinn.['./source/js/*.js', './source/js/**/underscore.js', './source/js/**/!(underscore)*.js']
!(foobar)
) zu verwenden, wenn Sie zuvor eine bestimmte Datei eingefügt haben.['src/app/**/!(*-)*.js', 'src/app/**/*.js']
Ich habe das Gulp-Order-Plugin verwendet, aber es ist nicht immer erfolgreich, wie Sie an meinem Stapelüberlauf nach dem Gulp-Order-Knotenmodul mit zusammengeführten Streams sehen können . Beim Durchsuchen der Gulp-Dokumente bin ich auf das Streamque-Modul gestoßen, das sich sehr gut für die Angabe der Reihenfolge der Verkettung in meinem Fall eignet. https://github.com/gulpjs/gulp/blob/master/docs/recipes/using-multiple-sources-in-one-task.md
Ein Beispiel dafür, wie ich es benutzt habe, ist unten
quelle
Mit gulp-useref können Sie jedes in Ihrer Indexdatei deklarierte Skript in der Reihenfolge verketten, in der Sie es deklarieren.
https://www.npmjs.com/package/gulp-useref
Und im HTML müssen Sie den Namen der Build-Datei, die Sie generieren möchten, wie folgt deklarieren:
In Ihrem Build-Verzeichnis befindet sich der Verweis auf main.min.js, der vendor.js, test.js und main.js enthält
quelle
Der Sortierstrom kann auch verwendet werden, um eine bestimmte Reihenfolge der Dateien mit sicherzustellen
gulp.src
. Beispielcode, der diebackbone.js
immer als letzte zu verarbeitende Datei enthält:quelle
Ich füge nur Zahlen am Anfang des Dateinamens hinzu:
Es funktioniert in Schluck ohne Probleme.
quelle
Ich habe meine Skripte in verschiedenen Ordnern für jedes Paket organisiert, das ich von bower abrufe, sowie mein eigenes Skript für meine App. Da Sie die Reihenfolge dieser Skripte irgendwo auflisten werden, warum nicht einfach in Ihrer gulp-Datei auflisten? Für neue Entwickler in Ihrem Projekt ist es schön, dass alle Ihre Skriptendpunkte hier aufgelistet sind. Sie können dies mit gulp-add-src tun :
gulpfile.js
Hinweis: jQuery und Bootstrap wurden zu Demonstrationszwecken der Bestellung hinzugefügt. Wahrscheinlich ist es besser, CDNs für diese zu verwenden, da sie so weit verbreitet sind und Browser sie möglicherweise bereits von anderen Websites zwischengespeichert haben.
quelle
Versuchen Sie es mit Stream-Serien . Es funktioniert wie merge-stream / event-stream.merge (), nur dass es nicht verschachtelt, sondern an das Ende angehängt wird. Sie müssen den Objektmodus nicht wie " Streamqueue" angeben , damit Ihr Code sauberer wird.
quelle
merge2 scheint derzeit das einzige funktionierende und gepflegte Tool zum Zusammenführen geordneter Streams zu sein.
Update 2020
Die APIs ändern sich ständig, einige Bibliotheken werden unbrauchbar oder enthalten Schwachstellen, oder ihre Abhängigkeiten enthalten Schwachstellen, die seit Jahren nicht mehr behoben sind. Für die Bearbeitung von Textdateien sollten Sie benutzerdefinierte NodeJS-Skripte und beliebte Bibliotheken wie
globby
undfs-extra
zusammen mit anderen Bibliotheken ohne Gulp-, Grunt- usw. Wrapper verwenden.quelle
Eine alternative Methode ist die Verwendung eines Gulp-Plugins, das speziell für dieses Problem erstellt wurde. https://www.npmjs.com/package/gulp-ng-module-sort
Sie können Ihre Skripte sortieren, indem Sie Folgendes hinzufügen
.pipe(ngModuleSort())
:Angenommen, eine Verzeichniskonvention von:
Hoffe das hilft!
quelle
Für mich hatte ich natualSort () und angularFileSort () in Pipe, die die Dateien neu ordneten. Ich habe es entfernt und jetzt funktioniert es gut für mich
quelle
Ich benutze nur gulp-angle-filesort
quelle
Ich bin in einer Modulumgebung, in der alle mit gulp kernabhängig sind. Also, die
core
Modul muss also vor den anderen angehängt werden.Was ich getan habe:
src
Ordnergulp-rename
deincore
Verzeichnis zu_core
schluck hält die
gulp.src
ordnung von dir , mein concatsrc
sieht so aus:Es wird offensichtlich das
_
als erstes Verzeichnis aus der Liste nehmen (natürliche Sortierung?).Hinweis (anglejs): Ich verwende dann gulp- angle -extender , um die Module dynamisch zum
core
Modul hinzuzufügen . Zusammengestellt sieht es so aus:Wobei Admin und Produkte zwei Module sind.
quelle
Wenn Sie Bibliotheksabhängigkeiten von Drittanbietern bestellen möchten , versuchen Sie es mit wiredep . Dieses Paket überprüft grundsätzlich jede Paketabhängigkeit in bower.json und verkabelt sie dann für Sie.
quelle
Ich habe mehrere Lösungen von dieser Seite ausprobiert, aber keine hat funktioniert. Ich hatte eine Reihe von nummerierten Dateien, die ich einfach nach alphabetischem Ordnernamen sortieren wollte, damit
concat()
sie in der gleichen Reihenfolge weitergeleitet werden. Behalten Sie also die Reihenfolge der Globbing-Eingabe bei. Einfach richtig?Hier ist mein spezifischer Proof-of-Concept-Code (
print
nur um die auf dem CLI gedruckte Bestellung zu sehen):Der Grund für den Wahnsinn von
gulp.src
? Ich habe festgestellt, dassgulp.src
asynchron ausgeführt wurde, als ich einesleep()
Funktion verwenden konnte (mithilfe von a.map
mit dem Index inkrementierten Schlafzeit) verwenden konnte, um die Stream-Ausgabe ordnungsgemäß zu ordnen.Das Ergebnis der Asynchronität von
src
mittleren Verzeichnissen mit mehr Dateien kam nach Verzeichnissen mit weniger Dateien, da die Verarbeitung länger dauerte.quelle
In meinem Gulp-Setup spezifiziere ich zuerst die Herstellerdateien und dann das (allgemeinere) Alles. Und es stellt den Anbieter erfolgreich js vor die anderen benutzerdefinierten Sachen.
quelle
Anscheinend können Sie die Option "nosort" an gulp.src gulp.src übergeben .
quelle