啊,所以在真正思考清楚之后,一切实际上都按照我之前的例子中的预期运行。
显然我没有给予足够的重视。app.toTree()
执行此操作为时已晚,因为所有内容都已构建并连接。
幸运的是,ember-cli 确实允许插件在各个生命周期里程碑修改适当的树。
See: https://github.com/ember-cli/ember-cli/blob/master/ADDON_HOOKS.md有关当前可用的挂钩的更多详细信息。
应该解决这个问题的钩子是Addon.prototype.postprocessTree
。现在我们有两个选择,我们可以构建一个独立的插件,通过ember addon
或者我们可以通过创建一个轻量级的回购插件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
不是后期处理中可用的类型之一,所以我添加了它: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;
}
}
};