2015-12-26 30 views
5

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

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.jspostBuild钩的一部分来解决这个问题,但同时,这并把JS文件放到dist文件夹的根目录下,显然如果不是通过其中的一个构建管道进行推送的话,它不会被ember-cli的ember serve服务。

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

+0

你有没有试过用默认蓝图'this.addBowerPackageToProject('upup.js')'导入? – Bek

+0

@Bek'addBowerPackageToProject'是将文件放入bower_components目录的第一步。我需要做的是将两个JS文件从它们的初始位置移动到应用程序构建的根(也就是'/ dist'文件夹)。这很重要,因为如果他们不在分配的根源,那么服务人员将无法与所有页面资产进行交互。 – ken

+0

如果你已经有了'addBowerPackageToProject',那么你需要通过'include'钩子中的'app.import()'将它们导入主'index.js'中,你试过了吗?如果没有,我会写这个答案? – Bek

回答

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

希望有所帮助。

相关问题