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. :(
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