如何让我的ember cli插件提供供应商树

时间:2015-10-08 15:38:26

标签: ember.js ember-cli

我正在尝试使用它将我的插件供应供应商的数据提供给应用程序。该库是CKEditor(从CKEditor构建器生成的自定义版本)。 我知道我可以使用插件蓝图添加一个bower依赖,但由于CKEditor是自定义的,我不能使用bower在消费应用程序中下载相同的版本。 我已经使用 treeForPublic broccoli漏斗从我的插件供应商文件夹中将整个ckeditor文件夹复制到app公共文件夹(这是ckeditor所必需的)。 我唯一的问题是消费应用程序还需要在其供应商文件夹中包含ckeditor文件夹,否则它将无法构建,因为观察者无法找到它。 我的印象是,如果插件将文件夹移动到公共目的地并且还导入包含挂钩中的js / css文件,则最终应用程序不需要原始供应商文件夹。 我是否理解错误,或者我可以在不重复插件和应用程序之间的ckeditor文件夹的情况下执行此操作吗?

这是我到目前为止所做的:

included: function(app) {
    this._super.included(app);

    app.import('vendor/ckeditor_custom/ckeditor.js');
    app.import('vendor/ckeditor_custom/styles.js');
    app.import('vendor/ckeditor_custom/lang/fr.js');
    app.import('vendor/ckeditor_custom/skins/minimalist/editor.css');
},

contentFor: function(type, config) {
    if (type === 'vendor-prefix') {
        return "window.CKEDITOR_BASEPATH = 'assets/ckeditor/';";
    }
},

treeForPublic: function (tree) {
    var ckeditorTree = new Funnel('vendor/ckeditor_custom/', {
        srcDir: '/',
        exclude: ['**/.DS_Store','**/*.md'],
        destDir: 'assets/ckeditor'
    });

    return BroccoliMergeTrees([tree, ckeditorTree]);
},

treeForVendor: function (tree) {
    var ckeditorTree = new Funnel('vendor/ckeditor_custom/', {
        srcDir: '/',
        exclude: ['**/.DS_Store','**/*.md'],
        destDir: 'ckeditor_custom'
    });

    return ckeditorTree;
},

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

给它一个旋转:

var path = require('path');
var mergeTrees = require('broccoli-merge-trees');
var concat = require('broccoli-concat');

module.exports = {
  name: 'myaddon',

  treeForVendor: function(tree) {
    var trees = [tree];

    var ckeditorTree = path.join('bower_components', 'ckeditor_custom');

    trees.push(concat(ckeditorTree, {
      inputFiles: [
        'ckeditor.js',
        'styles.js',
        'lang/fr.js'
      ],
      outputFile: '/ckeditor.js'
    }));

    trees.push(concat(ckeditorTree, {
      inputFiles: [
        'skins/minimalist/editor.css'
      ],
      outputFile: '/ckeditor.css'
    }));

    return mergeTrees(trees);
  },

  included: function included(app) {
    this.app = app;
    app.import('vendor/ckeditor.js');
    app.import('vendor/ckeditor.css');
  }
};