我在样板中使用“核心”余烬插件,
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
答案 0 :(得分:1)
插件通常采用相反的方法:插件通过在消费应用程序中进行配置来管理合并到消费应用程序中的内容。
在最高级别上,每个插件都有一个入口点,该入口点是位于插件根目录中的index.js
文件。插件提供了某些配置选项,安装时会从消耗应用程序的config/environment.js
读取。
我认为ember-bootstrap
对您来说是一个非常不错的案例研究。查看their configuration options,更具体地说,查看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
目录合并到使用应用程序的文件:
正在使用的应用程序的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;
选中此general guide to building addons和the more advanced api以获得更多信息。