我正在使用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
之类的东西是否存在于西兰花之地?应该是?或者我应该以不同的方式解决这个问题?
答案 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']
});