2016-04-01 11 views
1

Das Problem

ich auf einem Ember.js Projekt arbeite, die verschiedenen Versionen (Produkte) für verschiedene Kunden hat. Obwohl die Funktionalität mehr oder weniger die gleiche ist, unterscheidet sich das Styling jedes Produkts stark. Daher haben wir "Standard" und produktspezifische Stylesheets. Ich wurde gebeten, den Buildcode so zu ändern, dass nur die entsprechenden .css (.less) -Dateien in die finale App kompiliert werden.einschließlich spezifischer Stylesheets oder JavaScript in glut-cli-build

Ursprünglich sah ich dieses Problem von der falschen Seite: Ich habe versucht, die Ordner mit den unnötigen Dateien mit wenig Erfolg auszuschließen. Erst dann habe ich erkannt, dass es sinnvoller ist nicht standardmäßig die produktspezifischen Dateien einzuschließen und sie dem Build während des Builds hinzuzufügen.

Die Lösung

Nach meiner Sicht ändert ich dort fand heraus, eine andere Art und Weise herum ist. Ich änderte die Stylesheets, so dass alle "Standard-Looks" in ein import-base.less gingen und ich ein import-[name_of_product].less für jedes der Produkte erstellte, wobei letztere die Import-Anweisung zu den Standard-Looks enthielten, sodass ich nur eine Datei erstellen musste. Unter Verwendung der Option outputPaths in EmberApp und unter der Annahme, dass der Name des Produkts in der Prozessumgebungsvariablen FLAVOUR gespeichert ist, sieht mein Code wie folgt aus.

// ember-cli-build.js 

/* global require, module */ 
var EmberApp = require('ember-cli/lib/broccoli/ember-app'); 

module.exports = function(defaults) { 
    // y u do dis 
    const options = { outputPaths: { app: { css: { app: false } } } }; 

    const lessFileName = 'import-' + process.env.FLAVOUR.toLowerCase(); 
    options.outputPaths.app.css[lessFileName] = 'assets/application.css' 

    const app = new EmberApp(defaults, options); 

    return app.toTree(); 
}; 

Es gibt immer etwas

Das einzige Problem mit diesem Code ist, dass es immer noch eine app.less und diese Codezeile muss oder aber die Erstellung fehl, konnte nicht (haben keine Zeit gehabt, zu) finde eine Lösung heraus.

Ich muss auch erwähnen, dass die obige Lösung nicht das ursprüngliche Problem nicht lösen, das war:
Wie bestimmte Dateien aus dem Arbeitsverzeichnis auszuschließen, bevor app.toTree() verwenden, so dass sie nicht die Dateigröße unnötig erhöhen würde. Lux war so nett und wies darauf hin, dass wahrscheinlich In-Repo-Addons für solche Zwecke verwendet werden sollen. Noch einmal, hatte keine Zeit zu überprüfen. :(

+0

Hier tun kann a [pastebin link] (http://pastebin.com/hig1nkdW) zu meiner 'ember-cli-build.js' Datei für den Fall, dass Sie es überprüfen wollten. Ich entfernte die Codezeilen, die irrelevant sind. – Abel

Antwort

1

Ich glaube, Sie nur funnel

so etwas wie diese verwenden:!

return new Funnel(app.toTree(), { 
    include: ['**/*'] 
    exclude: ['styles/*.css'] 
}); 

allgemeinen Sie alles tun können Sie in einem Brocfile in Ihrem ember-cli-build.js

+0

Danke für die Antwort Ich habe es ausprobiert, aber leider ist es nicht gelungen, In der kompilierten dist/app.js erscheinen immer noch die Zeilen aus der ausgeschlossenen Datei, was bedeutet, dass der Grund dafür, das Problem der abnehmenden Dateigröße, immer noch besteht. Wenn ich mit irgendwelchen Protokollen oder dergleichen helfen kann, lass es mich wissen. – Abel

+0

Ich dachte, Sie möchten Dateien von der endgültigen Ausgabe entfernen. Wenn Sie einen Kompilierungsschritt für diese Dateien haben, müssen Sie vorher filtern. Kann ein In-Repo-Addon verwenden. – Lux

+0

Okay, ich habe diesen ganzen Prozess nochmals überprüft und mit Hilfe einiger Exclude-Funktionen console.log() habe ich realisiert, worüber du geredet hast. Der .toTree() gibt den kompilierten Baum zur Verarbeitung zurück, so dass ich die Ordner, die ich möchte, nicht ausschließen kann. Können Sie mir ein ähnliches einfaches In-Repo-Addon oder ein anderes Beispiel als die Dokumentation zur Verfügung stellen? Auch ich werde meine Frage neu schreiben, so dass es mein Problem besser widerspiegelt. – Abel