Удаление некоторых файлов из дерева брокколи

Я использую ember-cli и брокколи.

Генерируется дерево, содержащее все файлы из моего приложения. Это дерево передается broccoli-manifest для создания файла манифеста кэша приложения HTML5. Однако я хотел бы исключить некоторые файлы из записи в манифест (они не должны быть доступны в автономном режиме - вместо этого в манифесте указывается FALLBACK).

Моей первой мыслью было отправить запрос на включение в манифест брокколи, позволяющий передать параметр, содержащий список файлов, которые следует игнорировать (например, не выводить в манифест).

Затем мне пришло в голову, что, возможно, более брокколи-способ приблизиться к этому будет заключаться в том, чтобы каким-то образом отфильтровать дерево перед передачей его в broccoli-manifest.

например что-то типа:

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 в стране брокколи? Должен ли? Или я должен сделать это по-другому?


person vitch    schedule 14.08.2014    source источник


Ответы (2)


Я задал тот же вопрос в обсуждении ember.js. forum и rwjblue любезно предоставили мне ответ, который заключался в использовании broccoli-file -удаление.

e.g.

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

var filteredTree = removeFile(completeTree, {
  paths: ['assets/is-online.json']
});
person vitch    schedule 18.08.2014
comment
как вы используете это внутри Brocfile.js? - person shime; 22.01.2015
comment
Как и в моем примере кода выше (взято из brocfile ember-cli). imaginaryFilteringFunction - это то, что вы получаете из require('broccoli-file-remover')... В файле readme для удаления файлов брокколи есть больше примеров... - person vitch; 22.01.2015

Принятый ответ на это относится к 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 сейчас заключается в том, что он поддерживает globs, поэтому вы можете удалить все файлы is-online.json из любого места вашего дерева, используя что-то вроде этого:

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

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