2017-02-18 9 views
1

現在、cljsライブラリservantを使用しようとしています。それは、労働者から呼び出されているので、これは、文書が定義されていないというエラーが発生cljsのワーカーに複数のファイルを要求する

var CLOSURE_UNCOMPILED_DEFINES = null; 
if(typeof goog == "undefined") document.write('<script src="js/main.out/goog/base.js"></script>'); 
document.write('<script src="js/main.out/cljs_deps.js"></script>'); 
document.write('<script>if (typeof goog != "undefined") { goog.require("boot.cljs.main8234"); } else { console.warn("ClojureScript could not load :main, did you forget to specify :asset-path?"); };</script>'); 

(def worker-script "/main.js") ;; This is whatever the name of the compiled javascript will be 

マイmain.jsのようになります。私はこの抜粋のように一つのファイルだけを必要とすることができます私はHTML文書にアクセスできないと推測しています。 この問題を回避する方法はありますか?しかし、私はまだこれで成功を持っていなかった、働くだろう

importScripts('main.out/goog/base.js', 'http://localhost:3000/js/main.out/goog/deps.js', 'main.out/cljs_deps.js'); 
if (typeof goog != "undefined") { goog.require("../boot.cljs.main8234"); } else { console.warn("ClojureScript could not load :main, did you forget to specify :asset-path?"); }; 

:私は別のworker.jsファイルを作成し、それを埋める考えていました。私はmaggimoとして私のcljsを整理するためにブートを使用しています。私のjsファイルはjsディレクトリに保存されています。必要な情報を提供できなかった場合は、私が編集します。

答えて

0

サーバントREADMEは唯一の非ワーカースレッドはブラウザ固有のコードを実行していることを確認するために、次のif句とそれを囲む必要があり、言うように:

(if (servant/webworker?) 
    (worker/bootstrap) ;; Run the setup code for the web worker 
    (set! (.-onload js/window) window-load) ;; run the browser specific code) 

もう一つの方法は、使用することですワーカーコード用の別のビルド。その例はButlerライブラリにあります。

+0

私のクローズアップスクリプトの中から、メインスレッドでのみ実行すべきコードがあることをお勧めします。しかし、私の問題は、ワーカーがコンテキストを共有するために必要なコンパイル済みのjavascript自体が、javascriptファイルとドキュメントのパスを書き込むことです。あなたが示唆していることをやってこれを解決できないでしょう。バトラーを使用してもこの質問には本当に答えません。 –

+0

ワーカーjsファイルのコンパイルにはどのレベルの最適化を使用していますか? – Asher

+0

私はあなたの質問を理解しているか分からない。同じboot + adzerkコンパイルは、ワーカーファイルとメインファイルの両方に使用されます。私はそれ以来、それがどのように動作するかを学ぶために、より基本的な編集方法を使用することに決めました。次に、ドキュメントへの書き込みが追加された場所と理由を確認するまで、機能を追加できます。しかし、仮説のworker.jsファイルでは、jsで直接コーディングされているため、予期しないコンパイルはありません。 –

関連する問題