5

我有一个插件,它需要将一组 JS 文件从他们的 bower 目录复制到 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);
  },

注意:我认为我可以通过简单地复制 javascript 文件作为index.js postBuild钩子的一部分来解决这个问题,但是虽然这确实将 JS 文件放入 dist 文件夹的根目录,但ember serve如果没有通过一个推送,ember-cli 显然不会提供服务它的构建管道。

Stefan Penner 现在指出该dist目录是供开发人员查看的,但服务实际上是在tmp目录结构中完成的……这解释了为什么我的“hack”不起作用。

4

1 回答 1

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);
  }   
}

希望有帮助。

于 2016-01-01T00:53:27.963 回答