ember.js - Ember-cli-build,排除组件 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
。查看他们的配置选项,更具体地说是blacklist
选项。它们允许消费应用程序只安装引导组件的一个子集。此外,该项目支持 bootstrap 3 或 bootstrap 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();
};
结果将是 nobs-popover
并且bs-accordion
在消费应用程序树中不可用。这些选项是在index.js
文件中获得的,如下所示:
let options =Object.assign({}, defaultOptions, app.options['ember-bootstrap']);
this.bootstrapOptions = options;
推荐阅读
- tensorflow - 直接从缓存对象加载 tensorflow 数据集
- c++ - 为 operator<< 重载调用模板成员函数不匹配
- reactjs - React useState 切换仅切换一次
- java - 尝试在空对象引用上调用虚拟方法 'androidx.lifecycle.LiveData com.example.xxx.viewmodels.CoffeeViewModel.getAllOrders()'
- rust - 有没有一种好方法可以让服务器的客户端直接访问其他客户端而不使用互斥锁?
- google-cloud-automl - 当他们说:“至少 8、1、1 个边界框分别分配给您的训练集、验证集和测试集时,谷歌是什么意思(谷歌云视觉 API)
- asp.net - 在引用的 dll 中获取 ASPNET CORE Web 应用程序的根文件夹位置时面临问题
- python - docxtpl 中的上下文未更新
- python - 部署 PWA 问题
- r - 条件下拉面板数据