Ember-cli-build,排除组件 ember 插件

Ember-cli-build, exclude components ember addon

我在样板中使用 "core" 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

插件通常采用与此相反的方法:插件管理通过消费应用中的配置合并到消费应用中的内容。

在最高级别,每个插件都有一个入口点,即位于插件根目录中的 index.js 文件。该插件提供了某些配置选项,它在安装时从消费应用程序的 config/environment.js 中读取。

我认为 ember-bootstrap 对您来说是一个很好的案例研究。看看their configuration options and more specifically the blacklist option. They allow the consuming application to only install a subset of the bootstrap components. Furthermore, the project supports bootstrap 3 or bootstrap 4, but the consuming app isn't getting both! The work is done in 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 的核心是一个返回布尔值的过滤函数,如果黑名单在黑名单案例中包含它,则 returns 为真(那里用于排除它)。 treeForApp 函数 returns 所有应用程序文件的树,即将从插件的 app 目录合并到消费应用程序中的内容:

消费应用程序的 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-popoverbs-accordion 可用。这些选项在 index.js 文件中获取,如下所示:

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

查看此 general guide to building addons and the more advanced api 了解更多信息。