从西兰花树中删除一些文件

时间:2014-08-14 10:54:37

标签: node.js ember-cli broccolijs

我正在使用ember-cli和西兰花。

生成一个包含应用程序中所有文件的树。此树将传递到broccoli-manifest以生成HTML5应用程序缓存清单文件。但是,我想将一些文件排除在写入清单之外(它们不应该脱机使用 - 而是在清单中指定了FALLBACK。)

我的第一个想法是向broccoli-manifest提交拉取请求,允许您传递包含要忽略的文件列表的选项(例如,不输出到清单中)。

然后我发现,或许更接近它的西兰花方式是以某种方式过滤树,然后将其传递给西兰花 - 清单。

e.g。类似的东西:

var completeTree = app.toTree();
var filteredTree = imaginaryFilteringFunction(completeTree, {
  exclude: ['assets/is-online.json']
});
module.exports = mergeTrees([completeTree, writeManifest(filteredTree, {
  fallback: ['assets/is-online.json assets/offline.json']
})]);

我的imaginaryFilteringFunction之类的东西是否存在于西兰花之地?应该是?或者我应该以不同的方式解决这个问题?

2 个答案:

答案 0 :(得分:2)

我在ember.js discussion forum上问了同样的问题,而rwjblue非常友好地为我提供了使用broccoli-file-remover的答案。

e.g。

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

var filteredTree = removeFile(completeTree, {
  paths: ['assets/is-online.json']
});

答案 1 :(得分:0)

对此的公认答案是指向broccoli-file-remover,现在不推荐使用broccoli-funnel

新解决方案将如下所示:

const funnel = require('broccoli-funnel');

const completeTree = app.toTree();
const filteredTree = funnel(completeTree, {
  exclude: ['assets/is-online.json']
});

现在使用broccoli-funnel的好处是它支持glob,因此您可以使用以下方法从树中的任何位置删除所有is-online.json文件:

const funnel = require('broccoli-funnel');

const completeTree = app.toTree();
const filteredTree = funnel(completeTree, {
  exclude: ['**/is-online.json']
});