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-popover
和 bs-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 了解更多信息。
我在样板中使用 "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-popover
和 bs-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 了解更多信息。