Включая определенные таблицы стилей или 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!

Другие вопросы по тегам