2016-09-08 3 views
1

私はEmberアプリケーションにWebワーカーを使って機能を実装しており、ワーカーソースをパッケージ化する方法を理解するのに問題があります。Ember.jsで使用するWebワーカーソースのパッケージ化

私の最初のアプローチは、assetsディレクトリにworker.jsを配置することでしたが、私たちの構成では、資産は生産の別のサーバーから提供されている、と私たちはエラーを取得:

Failed to construct Worker: Script at https://static-assets.foo.com cannot be accessed from origin https://app.foo.com

私はdocument.domainでfutzingてみました( foo.comに変更)、エラーは解決しません。

私は同じ場所に展開されるだろう、とでもたらされる可能性がある、 app.jsvendor.js(たとえば、 worker.js)に加えて、別のJSバンドルを作成する ember-cli-build.js(別名 Brocfile.js)を変更することができれば、私は疑問に思い

<script>タグindex.htmlです。しかし、app.js/vendor.jsのロジックがember-cliに焼き付けられたり、ブロッコリーに関する知識が不足しているため、その方法を理解することができません。

次に、私はblobからワーカーを作成することを検討しました。問題は、ブロブのソースをどこに格納するかです。私はブロブのソースを非標準の<script>タグの中に入れて、index.htmlに入れておきました。ここから、それを取り出してブロブを作成することができました。しかし、私はindex.htmlに直接ワーカーソースを挿入したくないので、broccoli-replaceを使うと思ったのですが、ワーカーソースはES6で書かれており、蒸散が必要です。私はindex.htmlに物を挿入することができるemberアドオンを使用することを検討しましたが、挿入するテキストを指定する必要があり、どこから取得するのかわからず、蒸散の問題が残ります。

次に、関数内でワーカーソースをラップし、実行時に関数を文字列化して本文を抽出する({}の間)など、いくつかの非常にクルージーなソリューションを考えました。それはうまくいくが、悪臭は圧倒的だ。Babelに_toConsumableArrayのような小さな実行時ユーティリティを呼び出させる拡散演算子や配列の破壊などのES6構造は使用できない。

上記の方法のいずれかを実行するための妥当な解決法または方法はありますか?

+0

「app.foo.com」のスクリプトを許可する設定はどうですか? –

答えて

0

ブロッコリーが気に入っています。 FunnelMergeTreesが必要です。

ember-cli-build.jsでは、app.toTree()の代わりに自分のツリーを返す必要があります。ですから、このような何かを行うことができます。

let workers = new Funnel('app/workers', { 
    destDir: 'workers' 
}); 

return new MergeTree([app.toTree(), workers]); 

これは、基本的には、ビルド時にdist/workersapp/workersディレクトリをコピーし、また、すべての変更を適用し、livereloadをトリガーします。

0

残念ながら、ない即時溶液(プレアルファ)が、見てい:@https://github.com/runspired/skyrocket

をエブラヒム・pasbani:CORSが原因Worker同一生成元ポリシーのお手伝いをしません。クイックダーティーな修正のために私はxhr(または$.getScript)を使用しました。 gistを参照してください。

関連する問題