Ich habe ein ziemlich spezifisches Problem: Ich versuche, einen komplexen Stapel mit Sails.js mit machinpack-sailsgulpify zu bauen.gulp-inject: fehlende End-Tag für Start-Tag bei der Verwendung von Mops
Um Assets in meine Vorlagen zu injizieren, benutze ich gulp-inject
Plugin, wie das Maschinenpaket vorschlägt. Das Problem ist, dass für alles andere als html
und ejs
der Injektor nicht funktioniert. Es ändert einfach nichts. Keine Fehler, nichts.
Meine Aufgabe sieht wie folgt aus:
gulp.task('sails-linker-gulp:devViews', function() {
return gulp.src('views/**/*.?(html|ejs|jade|pug|haml|slim|dust)') // Read templates
.pipe(
plugins.inject(
gulp.src(require('../pipeline').jsFilesToInject, {read: false}), // Link the javaScript
{
starttag: generateScriptStartTag,
endtag: generateScriptEndTag,
ignorePath: '.tmp/public',
transform: (filepath, file, i, length) => {
return `script(src="${filepath}")`;
}
}
)
)
.pipe(
plugins.inject(
gulp.src(require('../pipeline').cssFilesToInject, {read: false}), // Link the styles
{
starttag: generateStyleStartTag,
endtag: generateStyleEndTag,
ignorePath: '.tmp/public'
}
)
)
.pipe(
plugins.inject(
gulp.src(['.tmp/public/jst.js'], {read: false}), // Link the JST Templates
{
starttag: generateTemplateStartTag,
endtag: generateTemplateEndTag,
ignorePath: '.tmp/public'
}
)
)
.pipe(gulp.dest('views/'))// Write modified files...
Sorgen Sie sich nicht über die generateScriptStartTag
und solche Funktionen, sie sind da nur für die Kontrolle und ich bin 1000% sicher, dass sie korrekt funktionieren, getestet viel. Sie erzeugen die Tags wie folgt:
//- SCRIPTS
//- SCRIPTS END
je nach Vorlagensprache.
Das Hinzufügen der benutzerdefinierten Transformationsfunktion funktionierte nicht. Wenn ich ejs
oder html
oder wirklich alles verwende, das HTML-Syntax ähnelt, funktioniert es gut.
Jetzt, über Sails: Ich kann keine Schluckaufgabe hinzufügen, um die Vorlage vor dem Injizieren zu kompilieren, weil Sails Vorlagen auf Anforderung in der Entwicklung rendert, sie nicht wirklich in irgendeinem Verzeichnis vorkompiliert. Und ehrlich: warum sollte ich? Die Injektion fügt nur Zeilen zu meinen .jade/.pug Dateien in views
hinzu, die Dateien sind bereits da, also sehe ich nicht, warum es dort ein Problem gibt. Kann jemand beraten?
UPDATE: Eher frustrierend Inspektion des Codes ergab, dass die ‚Streichhölzer‘ Eigenschaft beim Ausführen der inject
Funktion hat die Länge 0 und wenn die content
des Stroms in Knoten Inspektoren Inspektion, ich sah nicht die Kommentare, Sie wurden entfernt, obwohl sie offensichtlich in der Akte sind.
UPDATE # 2: Es scheint, dass ich falsch über ejs war. NUR HTML-Dateien werden verarbeitet. Es funktioniert auch, wenn es die Injektionskommentare nicht erkennt. Wenn es jedoch das Endereignis tut, wird für diese Datei einfach nie ausgegeben und nichts wird injiziert. Dies gilt für ALLE Template-Engines, nur statische HTML-Dateien funktionieren einwandfrei.
UPDATE # 3: Nach weiteren 5 Stunden Debuggen fand ich das Problem, aber mein Verständnis von Streams ist nicht gut genug, um mich näher an die Lösung. Das Problem ist, dass in inject
Funktion des Plugins gibt es eine Schleife, die nicht ordnungsgemäß beendet, und während es perfekt die erforderlichen Tags in den Stream injiziert, führt es dann diese Schleife erneut auf den gleichen Strom (mit injizierten Tags) und Würfe ein Fehler. Warum dieser Fehler nie in irgendeiner Konsole auftauchte, weiß ich nicht, aber dort gehen Sie. Kann mir bitte jemand helfen? Ich bin damit völlig verloren ... Ist es ein Fehler im Plugin?