2015-12-26 6 views
5

JSファイルのセットをbowerディレクトリからEmberアプリケーションのルート/distにコピーする必要があるアドオンがあります(これはサービスワーカーに関連する有効範囲規則です)。私はおそらくtreeForAppフックを使用することができたと思ったが、私はエラーが発生していない間にも私は望みの結果を得ていない。Emberアドオンがルートディレクトリにファイルを追加します

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

注:私は、私は単にindex.jsポストビルドフックの一部としてJavaScriptファイルをコピーすることによってこの問題を解決することができるかもしれないと思ったが、これはDOESながら、 distファイルのルートにJSファイルを置いてください。ember-cliのember serveによって提供されていません。明らかに、そのパイプラインの1つにプッシュされていなければなりません。私の「ハック」は機能しなかった理由を

ステファン・ペナーは今、開発者が見てみたが、実際にtmpディレクトリ構造内で行われる提供するためのdistディレクトリは指摘している...これは説明します。

+0

デフォルトの青写真 'this.addBowerPackageToProject( 'upup.js')'でインポートしようとしましたか? – Bek

+0

@Bek 'addBowerPackageToProject'は、ファイルをbower_componentsディレクトリに入れるための最初のステップです。私がそこから行う必要があるのは、2つのJSファイルを最初の場所からアプリケーションビルドのルート(別名 '/ dist'フォルダ)に移動することです。これは重要です。ディストリビューションのルートに存在しない場合、サービスワーカーはすべてのページアセットとやりとりすることができないからです。 – ken

+0

'addBowerPackageToProject'を既に持っているなら、' include'フックで 'app.import()'を使ってメイン 'index.js'にインポートする必要があります。そうでない場合、私はそれを答えとして書くでしょうか? – Bek

答えて

4

私の最初の試みは完全に遠くないようです。助け

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

希望:それを動作させるために、あなたはそうのようなtreeForPublicフックにフックする必要があります。

関連する問題