Ember-cli-build, исключая компоненты ember addon - PullRequest
0 голосов
/ 21 ноября 2018

Я использую «основной» аддон ember в шаблоне, с

npm link core-addon

Этот аддон содержит общие компоненты, помощники, маршруты ...

Есть ли способисключить некоторые из этих компонентов в файле ember-cli-build шаблонов?

Я уже пробовал следующее в ember-build-cli в моем проекте шаблонов, что, вероятно, неправильно:

const EmberApp = require('ember-cli/lib/broccoli/ember-app');
const environment = EmberApp.env();
module.exports = function (defaults) {
    let app = new EmberApp(defaults, {
        funnel: {
                enabled:true,
                exclude:['core-addon/pods/components/pages/**/*']
            },
    });
return app.toTree();
};

Ember версия: 3.5.0 Ember cli версия 3.5.0 версия узла 8.11.3

1 Ответ

0 голосов
/ 22 ноября 2018

Аддоны обычно используют обратный подход: аддон управляет тем, что объединяется с потребляющим приложением, через конфигурацию в потребляющем приложении.

На самом высоком уровне каждый аддон имеет точку входа, которая является index.js файл сидит в корневом каталоге аддона.Аддон предоставляет определенные параметры конфигурации, которые он читает из config/environment.js приложения-потребителя при установке.

Я думаю, что действительно хорошим примером для вас будет ember-bootstrap.Посмотрите на их параметры конфигурации и, более конкретно, параметр blacklist.Они позволяют потребляющему приложению устанавливать только подмножество компонентов начальной загрузки.Кроме того, проект поддерживает начальную загрузку 3 или начальную загрузку 4, но приложение-потребитель не получает и того, и другого!Работа выполняется в index.js

Давайте посмотрим, как они заносят в черный список (то есть исключают) определенные компоненты, добавляемые в приложение-потребитель:

treeForApp(tree) {
  tree = this.filterComponents(tree);
  return this._super.treeForApp.call(this, tree);
},
filterComponents(tree) {
  let whitelist = this.generateWhitelist(this.bootstrapOptions.whitelist);
  let blacklist = this.bootstrapOptions.blacklist || [];

  // exit early if no opts defined
  if (whitelist.length === 0 && blacklist.length === 0) {
    return tree;
  }

  return new Funnel(tree, {
    exclude: [(name) => this.excludeComponent(name, whitelist, blacklist)]
  });
}

где this.excludeComponent в своей основе - логическая функция возвращающего фильтра, которая возвращает true, если черный список содержит его в случае черного списка (для исключения).Функция treeForApp возвращает дерево для всех файлов приложения, то есть то, что будет объединено из app dir аддона в приложение-потребитель:

ember-cli-build приложения-пользователя будет выглядеть примерно так:

//your-bootstrap-app/ember-cli-build.js

module.exports = function(defaults) {
  let app = new EmberApp(defaults, {
    'ember-bootstrap': {
      blacklist: ['bs-popover', 'bs-accordion']
    }
  });

  return app.toTree();
};

и результатом будет отсутствие bs-popover и bs-accordion в дереве приложений-потребителей.Эти параметры можно получить в файле index.js следующим образом:

let options =Object.assign({}, defaultOptions, app.options['ember-bootstrap']);
this.bootstrapOptions = options;

Проверьте это общее руководство по созданию аддонов и для более продвинутых API для получения дополнительной информации.

...