从Brocfile中的构建中排除文件夹

Woo*_*Dzu 10 javascript ember.js ember-cli broccolijs

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

/app/modules/components
/app/modules/app1
/app/modules/app2
/app/modules/app3
Run Code Online (Sandbox Code Playgroud)

当环境设置为"开发"或仅限于例如,我想构建它们.环境为'app1'时'app1'.有什么建议?

我尝试了不同的西兰花 - 文件 - 去除剂,西兰花 - 漏斗和西兰花 - 合并树的组合无济于事.

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

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

Ste*_*ner 4

啊,所以在真正思考清楚之后,一切实际上都按照我之前的例子中的预期运行。

显然我没有给予足够的重视。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-addons,因为它们不需要第二个项目,但在其他方面它们是相同的。

  1. ember g in-repo-addon 删除
  2. 我们需要通过安装 broccoli-stewnpm install --save broccoli-stew
  3. 包括它var stew = require('broccoli-stew')
  4. 将钩子 postprocessTree 添加到附加组件
  5. 当 postprocessTree 是我们关心的类型时,使用 broccoli-stew 删除我们不再关心的目录。

由此产生的拉取请求:https://github.com/WooDzu/ember-exclude-pod/pull/1

注意:我注意到template这不是后期处理中可用的类型之一,所以我添加了它:https ://github.com/ember-cli/ember-cli/pull/4263 (应该是下一个 ember-cli 版本的一部分)

注意:我们确实需要一个额外的 hook 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;
    }
  }

};
Run Code Online (Sandbox Code Playgroud)