Включая определенные таблицы стилей или javascript в ember-cli-build
Эта проблема
Я работаю над проектом Ember.js, который имеет разные версии (продукты) для разных клиентов. Хотя функциональные возможности более или менее одинаковы, стилизация каждого продукта отличается большим временем. Следовательно, у нас есть таблицы стилей по умолчанию и для конкретного продукта. Меня попросили изменить код сборки, чтобы в окончательное приложение компилировались только соответствующие файлы.css (.less).
Первоначально я смотрел на эту проблему с неправильной стороны: я пытался исключить папки, содержащие ненужные файлы, без особого успеха. Только тогда я понял, что имеет больше смысла не включать файлы продукта по умолчанию и добавлять их в дерево во время сборки.
Решение
Изменив свою точку зрения, я обнаружил, что есть и другой путь. Я изменил таблицы стилей так, чтобы все "взгляды по умолчанию" перешли в import-base.less
и я создал import-[name_of_product].less
для каждого из продуктов, с последними, содержащими оператор импорта к виду по умолчанию, поэтому у меня есть только один файл для сборки. С использованием outputPaths
вариант в EmberApp
и предполагая, что название продукта хранится в переменной среды процесса, называемой FLAVOUR
мой код выглядит следующим образом.
// 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();
};
Всегда есть что-то
Единственная проблема с этим кодом заключается в том, что app.less
и эта строка кода, иначе сборка не удалась, не могла (не успела) найти решение.
Я также должен упомянуть, что вышеупомянутое решение не решает исходную проблему, которая была:
Как исключить определенные файлы из рабочего каталога перед использованием app.toTree()
чтобы они не увеличивали размер файла без необходимости. Lux был так добр и указал, что, вероятно, для таких целей будут использоваться аддоны в репо. Еще раз, не было времени, чтобы проверить.:(
1 ответ
Я думаю, что вы можете просто использовать воронку!
что-то вроде этого:
return new Funnel(app.toTree(), {
include: ['**/*']
exclude: ['styles/*.css']
});
В общем, вы можете делать все, что вы можете сделать в Brocfile в вашем ember-cli-build.js
!