啊,所以在真正考虑清楚这一点之后,一切实际上都按照我之前的示例中的预期工作。
我显然没有足够的注意力。app.toTree()
执行此操作为时已晚,因为所有内容都已构建和连接。
幸运的是,ember-cli 确实使插件能够在各种生命周期里程碑修改适当的树。
有关当前可用的钩子的更多详细信息,请参阅:https ://github.com/ember-cli/ember-cli/blob/master/ADDON_HOOKS.md。
应该解决问题的钩子是Addon.prototype.postprocessTree
. 现在我们有两个选择,我们可以构建一个独立的插件,ember addon
或者我们可以创建一个轻量级的 in-repo 插件 via ember g in-repo-addon
。通常对于这些类型的情况,我更喜欢 in-repo-addons,因为它们不需要第二个项目,但除此之外它们是相同的。
- ember g in-repo-addon 删除
- 我们需要通过安装 broccoli-stew
npm install --save broccoli-stew
- 包括它
var stew = require('broccoli-stew')
;
- 将钩子 postprocessTree 添加到附加组件
- 当 postprocessTree 是我们关心的类型时,使用 broccoli-stew 删除我们不再关心的目录。
生成的拉取请求:https ://github.com/WooDzu/ember-exclude-pod/pull/1
注意:我注意到template
不是 postprocess 中可用的类型之一,所以我添加了它:https ://github.com/ember-cli/ember-cli/pull/4263 (应该是下一个 ember-cli 版本的一部分)
注意:我们真的想要一个额外的钩子
Addon.prototype.preprocessTree
,因为在我们构建它们之前忽略这些文件。我打开了一个相关问题:
https ://github.com/ember-cli/ember-cli/issues/4262
上述步骤的输出
var stew = require('broccoli-stew');
module.exports = {
name: 'remove',
isDevelopingAddon: function() {
return true;
},
postprocessTree: function(type, tree){
if (type === 'js' || type === 'template') {
return stew.rm(tree, '*/modules/pod{1,2}/**/*');
} else {
return tree;
}
}
};