从 Brocfile 中的构建中排除文件夹
Exclude folders from builds in Brocfile
有没有办法从 Brocfile(或任何其他地方)的构建中排除文件夹。
用例是打包,我有一个由 pods 中的子应用程序组成的应用程序。例如
/app/modules/components
/app/modules/app1
/app/modules/app2
/app/modules/app3
我想在环境设置为 'development' 或仅例如时构建它们。 'app1' 当环境为 'app1' 时。有什么建议吗?
我尝试了 broccoli-file-remover、broccoli-funnel 和 broccoli-merge-trees 的不同组合,但均无济于事。
var removeFile = require('broccoli-file-remover');
module.exports = removeFile(app.toTree(), {
paths: ['app/modules/pod1/', 'app/modules/pod2/']
});
我非常有信心 broccoli-stew 的 rm 会正确处理这个问题。
https://github.com/stefanpenner/broccoli-stew/blob/master/lib/rm.js#L4-L40 there are even tests that test a very similar scenario: https://github.com/stefanpenner/broccoli-stew/blob/master/tests/rm-test.js#L48-L57
var stew = require('broccoli-stew');
module.exports = stew.rm(app.tree(), 'app/modules/{pod1,pod2}');
如果这不起作用,请随时提出有关西兰花炖的问题。不过请务必提供 运行 示例
啊,其实想清楚了,其实一切都和我前面的例子中的预期完全一样。
我显然没有给予足够的重视。 app.toTree()
执行此操作为时已晚,因为所有内容都已构建并连接。
幸运的是,ember-cli 确实允许插件在各种生命周期里程碑处修改适当的树。
请参阅:https://github.com/ember-cli/ember-cli/blob/master/ADDON_HOOKS.md 了解有关当前可用挂钩的更多详细信息。
应该可以解决问题的钩子是 Addon.prototype.postprocessTree
。现在我们有两个选择,我们可以通过 ember addon
构建一个独立的插件,或者我们可以通过 ember g in-repo-addon
创建一个轻量级的 in-repo 插件。通常对于这些类型的情况,我更喜欢 in-repo-addons,因为它们不需要第二个项目,但除此之外它们是相同的。
- ember g in-repo-addon 删除
- 我们需要通过
npm install --save broccoli-stew
安装 broccoli-stew
- 包含它
var stew = require('broccoli-stew')
;
- 将钩子 postprocessTree 添加到附加组件
- 当 postprocessTree 是我们关心的类型时,使用 broccoli-stew 删除我们不再关心的目录。
生成的拉取请求:https://github.com/WooDzu/ember-exclude-pod/pull/1
Note: I noticed template
wasn't one of the types available in postprocess, so I added it: https://github.com/ember-cli/ember-cli/pull/4263 (should be part of the next ember-cli release)
Note: we really do want an additional hook
Addon.prototype.preprocessTree
, as to ignore the files before we
even build them. I have opened a related issue:
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;
}
}
};
这真的很晚了,但我创建了一个西兰花插件来做到这一点。可在 https://www.npmjs.com/package/broccoli-rm.
购买
(诀窍是检测排除的路径是否为文件夹,然后使用全局匹配确保文件夹的 none 个子文件夹在复制过程中获得符号链接。)
var rm = require('broccoli-rm');
var input = app.toTree();
module.exports = output = rm([input], {
paths: ['app/modules/pod1', 'app/modules/pod2']
});
有没有办法从 Brocfile(或任何其他地方)的构建中排除文件夹。 用例是打包,我有一个由 pods 中的子应用程序组成的应用程序。例如
/app/modules/components
/app/modules/app1
/app/modules/app2
/app/modules/app3
我想在环境设置为 'development' 或仅例如时构建它们。 'app1' 当环境为 'app1' 时。有什么建议吗?
我尝试了 broccoli-file-remover、broccoli-funnel 和 broccoli-merge-trees 的不同组合,但均无济于事。
var removeFile = require('broccoli-file-remover');
module.exports = removeFile(app.toTree(), {
paths: ['app/modules/pod1/', 'app/modules/pod2/']
});
我非常有信心 broccoli-stew 的 rm 会正确处理这个问题。
https://github.com/stefanpenner/broccoli-stew/blob/master/lib/rm.js#L4-L40 there are even tests that test a very similar scenario: https://github.com/stefanpenner/broccoli-stew/blob/master/tests/rm-test.js#L48-L57
var stew = require('broccoli-stew');
module.exports = stew.rm(app.tree(), 'app/modules/{pod1,pod2}');
如果这不起作用,请随时提出有关西兰花炖的问题。不过请务必提供 运行 示例
啊,其实想清楚了,其实一切都和我前面的例子中的预期完全一样。
我显然没有给予足够的重视。 app.toTree()
执行此操作为时已晚,因为所有内容都已构建并连接。
幸运的是,ember-cli 确实允许插件在各种生命周期里程碑处修改适当的树。
请参阅:https://github.com/ember-cli/ember-cli/blob/master/ADDON_HOOKS.md 了解有关当前可用挂钩的更多详细信息。
应该可以解决问题的钩子是 Addon.prototype.postprocessTree
。现在我们有两个选择,我们可以通过 ember addon
构建一个独立的插件,或者我们可以通过 ember g in-repo-addon
创建一个轻量级的 in-repo 插件。通常对于这些类型的情况,我更喜欢 in-repo-addons,因为它们不需要第二个项目,但除此之外它们是相同的。
- ember g in-repo-addon 删除
- 我们需要通过
npm install --save broccoli-stew
安装 broccoli-stew
- 包含它
var stew = require('broccoli-stew')
; - 将钩子 postprocessTree 添加到附加组件
- 当 postprocessTree 是我们关心的类型时,使用 broccoli-stew 删除我们不再关心的目录。
生成的拉取请求:https://github.com/WooDzu/ember-exclude-pod/pull/1
Note: I noticed
template
wasn't one of the types available in postprocess, so I added it: https://github.com/ember-cli/ember-cli/pull/4263 (should be part of the next ember-cli release)Note: we really do want an additional hook
Addon.prototype.preprocessTree
, as to ignore the files before we even build them. I have opened a related issue: 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;
}
}
};
这真的很晚了,但我创建了一个西兰花插件来做到这一点。可在 https://www.npmjs.com/package/broccoli-rm.
购买(诀窍是检测排除的路径是否为文件夹,然后使用全局匹配确保文件夹的 none 个子文件夹在复制过程中获得符号链接。)
var rm = require('broccoli-rm');
var input = app.toTree();
module.exports = output = rm([input], {
paths: ['app/modules/pod1', 'app/modules/pod2']
});