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

Javascript 从文件中的生成中排除文件夹,javascript,ember.js,ember-cli,broccolijs,Javascript,Ember.js,Ember Cli,Broccolijs,是否有方法将文件夹从文件(或任何其他位置)中的生成中排除。 用例是打包,我有一个由pods中的子应用程序组成的应用程序。例如 /app/modules/components /app/modules/app1 /app/modules/app2 /app/modules/app3 我希望在环境设置为“开发”时构建它们,或者在环境设置为“app1”时仅构建“app1”。有什么建议吗 我尝试过不同组合的花椰菜锉刀,花椰菜漏斗和花椰菜合并树都没有用 var removeFile = require(

是否有方法将文件夹从文件(或任何其他位置)中的生成中排除。 用例是打包,我有一个由pods中的子应用程序组成的应用程序。例如

/app/modules/components
/app/modules/app1
/app/modules/app2
/app/modules/app3
我希望在环境设置为“开发”时构建它们,或者在环境设置为“app1”时仅构建“app1”。有什么建议吗

我尝试过不同组合的花椰菜锉刀,花椰菜漏斗和花椰菜合并树都没有用

var removeFile = require('broccoli-file-remover');

module.exports = removeFile(app.toTree(), {
    paths: ['app/modules/pod1/', 'app/modules/pod2/']
});

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

甚至还有测试非常类似的场景的测试:


如果这不起作用,请随意打开一个关于炖花椰菜的问题。请务必提供一个运行的示例,尽管

啊,因此,在实际清楚地考虑了这一点之后,所有操作实际上都完全按照我前面示例中的预期工作

我显然没有给予足够的关注
app.toTree()
太晚了,无法执行此操作,因为所有内容都已构建和实现

幸运的是,ember cli确实允许插件在不同的生命周期里程碑修改适当的树

有关当前可用的挂钩的更多详细信息,请参阅

实现这一技巧的钩子是
Addon.prototype.postprocessTree
。现在我们有两个选择,我们可以通过
ember插件
构建一个独立的插件,或者通过
ember g in repo插件
创建一个轻量级in repo插件。通常对于这些类型的情况,我更喜欢在repo插件中,因为它们不需要第二个项目,但在其他方面它们是相同的

  • repo插件中的灰烬g移除
  • 我们需要通过
    npm安装来安装西兰花炖菜——保存西兰花炖菜
  • 包括它
    var stew=require('brocoli-stew')
  • 将钩子后处理树添加到加载项
  • 当后处理树用于我们关心的类型时,使用Brocoli stew删除我们不再关心的目录
  • 生成的拉取请求:

    注意:我注意到
    template
    不是后处理中可用的类型之一,所以我添加了它:(应该是下一个ember cli版本的一部分)

    注意:我们确实需要一个额外的钩子
    Addon.prototype.prepretree
    ,以便在我们 甚至建造它们。我打开了一个相关的问题:

    以上步骤的输出

    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;
        }
      }
    
    };
    

    这真的很晚了,但我创建了一个花椰菜插件来实现这一点。可以在

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


    你好,斯蒂芬。到目前为止还没有欢乐。我已经创建了一个存储库来重现该问题,我是否应该报告在stew.rm()中内部使用的Brocoli stew或Brockli漏斗?是否可以在testsLike删除过程中不运行这些步骤,是否有方法将特定文件夹从监视更改中排除,例如。,排除用于实时重新加载的文件夹?在将INF ember cli从3.3.0更新到3.4.0之后,此操作将不再有效欢迎使用堆栈溢出!虽然这在理论上可以回答这个问题,但在这里包括答案的基本部分,并提供链接供参考。
    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;
        }
      }
    
    };
    
    var rm = require('broccoli-rm');
    var input = app.toTree();
    module.exports = output = rm([input], {
       paths: ['app/modules/pod1', 'app/modules/pod2']
    });