Ember.js CLI Build Broccoli Funnel не работает

Я пытаюсь использовать пакет Broccoli Funnel для извлечения полного каталога в папку с ресурсами в сборке Ember CLI. Пожалуйста, найдите мой файл ember-cli-build.js ниже:

var EmberApp = require('ember-cli/lib/broccoli/ember-app');
var Funnel = require('broccoli-funnel');

module.exports = function(defaults) {
  var app = new EmberApp(defaults, {
    //
  });

  var extraAssets = new Funnel('vendor/images/frames/artist/64', {
    destDir: '/assets/images'
  });

  app.toTree(extraAssets);

  return app.toTree();
};

Каталог «vendor/images/frames/artist/64» содержит только файлы изображений .png, и я хотел бы, чтобы все они были доступны после сборки в «assets/images/64/». После процесса сборки в моем каталоге ресурсов не создается папка с изображениями.

Не подскажете, где я ошибся? Существуют ли какие-либо инструменты отладки, чтобы показать, что Broccoli Funnel пытается добавить в сборку и куда эти файлы распространяются?


person jlommori    schedule 16.06.2016    source источник


Ответы (2)


app.ToTree принимает массив преобразованных узлов (деревьев в брокколи 1.xx).

Кроме того, вы должны вернуть узел, преобразованный вашим вызовом app.toTree.

Итак, вместо,

...

app.toTree(extraAssets);

return app.toTree();

Вы бы сделали,

return app.toTree([extraAssets])

Как и предлагает Lux, рекомендуется использовать broccoli-merge-trees.

var EmberApp   = require('ember-cli/lib/broccoli/ember-app'),
    Funnel     = require('broccoli-funnel'),
    MergeTrees = require('broccoli-merge-trees');

module.exports = function(defaults) {
  var app = new EmberApp(defaults, {
    //
  }),
  nodes = [];

  nodes.push(new Funnel('vendor/images/frames/artist/64', {
      destDir: '/assets/images'
  }));

  nodes.push(app.toTree());

  return new MergeTrees(nodes);
};    

Отладка деревьев/узлов брокколи

Для отладки выходных данных плагина broccoli используйте broccoli-stew. Вот краткий пример списка файлов, которые присутствуют сразу после шага воронки.

var EmberApp   = require('ember-cli/lib/broccoli/ember-app'),
    Funnel     = require('broccoli-funnel'),
    MergeTrees = requre('broccoli-merge-trees'),
    log        = require('broccoli-stew').log;

module.exports = function(defaults) {
  var app = new EmberApp(defaults, {
    //
  }),
  loggedNode,
  nodes = [];

  funnelOutput = new Funnel('vendor/images/frames/artist/64', {
      destDir: '/assets/images'
  }));

  nodes.push(log(funnelOutput))

  nodes.push(app.toTree());

  return new MergeTrees(nodes);
};
person Vishak Partha    schedule 26.06.2016

Вы должны использовать MergeTrees:

return new BroccoliMergeTrees([app.toTree(), extraAssets]);

вместо

app.toTree(extraAssets);

return app.toTree();
person Lux    schedule 17.06.2016