Ember插件将文件添加到根目录

ken*_*ken 5 ember.js ember-cli ember-cli-addons

我有一个插件,需要将一组JS文件从其凉亭目录复制到Ember应用程序的根目录/dist(这是与服务工作者相关的范围规则).我想也许我可以使用treeForApp钩子,但是当我没有错误时,我也没有得到理想的结果.

index.js方法是:

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

module.exports = {
  name: 'ember-upup',
  treeForApp: function(tree) {
    tree = new Funnel(tree, { include: 
      [ 
        'bower_components/upup/dist/upup.min.js',
        'bower_components/upup/dist/upup.sw.min.js' 
      ]});

    return this._super.treeForApp.call(this, tree);
  },
Run Code Online (Sandbox Code Playgroud)

注意:我想我可以通过简单地将javascript文件作为index.js postBuild钩子的一部分来复制来解决这个问题,但是当这个DOES将JS文件放入dist文件夹的根目录时,ember serve如果没有通过一个文件夹,它就不会被ember-cli服务它的构建管道.

Stefan Penner现在已经指出该dist目录供开发人员查看,但服务实际上是在tmp目录结构中完成的...这解释了为什么我的"hack"无效.

ken*_*ken 4

看起来我最初的尝试并不遥远。为了使它工作,你需要treeForPublic像这样挂入钩子:

const path = require('path');
const Funnel = require('broccoli-funnel');
const mergeTrees = require('broccoli-merge-trees');
const JS_FILES = ['upup.min.js', 'upup.sw.min.js'];

module.exports = {
  treeForPublic: function() {
    const upupPath = path.join(this.app.bowerDirectory, 'upup/dist');
    const publicTree = this._super.treeForPublic.apply(this, arguments);
    const trees = [];
    if (publicTree) {
      trees.push(publicTree);
    }
    trees.push(new Funnel(upupPath, {
      include: JS_FILES,
      destDir: '/'
    }));

    return mergeTrees(trees);
  }   
}
Run Code Online (Sandbox Code Playgroud)

希望有帮助。