从Brocfile中的生成中排除文件夹



有没有办法从Brocfile(或任何其他地方(的构建中排除文件夹。用例是打包,我有一个由pod中的子应用程序组成的应用程序。例如

/app/modules/components
/app/modules/app1
/app/modules/app2
/app/modules/app3

我想在环境设置为"development"时全部构建它们,或者仅在环境为"app1"时构建它们。有什么建议吗?

我尝试过西兰花锉刀、西兰花漏斗和西兰花合并树的不同组合,但都无济于事。

var removeFile = require('broccoli-file-remover');
module.exports = removeFile(app.toTree(), {
    paths: ['app/modules/pod1/', 'app/modules/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创建一个轻量级的内回购插件。通常,对于这些类型的情况,我更喜欢回购插件,因为它们不需要第二个项目,但在其他方面都是一样的。

  1. repo插件移除中的ember g
  2. 我们需要通过npm install --save broccoli-stew安装花椰菜炖菜
  3. 包括它CCD_ 6
  4. 将hook postprocessTree添加到附加组件
  5. 当postprocessTree是我们关心的类型时,使用花椰菜炖菜来删除我们不再关心的目录

由此产生的拉取请求: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;
    }
  }
};

我很有信心西兰花炖菜的rm会正确处理这个问题。

https://github.com/stefanpenner/broccoli-stew/blob/master/lib/rm.js#L4-L40甚至还有测试非常相似场景的测试: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}');

如果这不起作用,请随意打开一个关于西兰花炖菜的问题。请确保通过

提供一个运行示例

这真的很晚了,但我创建了一个Broccoli插件来做这件事。可在https://www.npmjs.com/package/broccoli-rm.

(诀窍是检测被排除的路径是否是文件夹,然后使用glob匹配来确保文件夹的子级在复制过程中没有符号链接。(

var rm = require('broccoli-rm');
var input = app.toTree();
module.exports = output = rm([input], {
   paths: ['app/modules/pod1', 'app/modules/pod2']
});

相关内容

  • 没有找到相关文章