2017-02-18 6 views
1

현재 cljs 라이브러리 servant을 사용하려고합니다. 나는 단지이 발췌처럼 하나 개의 파일을 필요로 할 수 있습니다cljs에서 작업자를 위해 여러 파일 필요

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

내 main.js는 다음과 같습니다

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

이 문서가 정의되지 않는 오류가 발생합니다, 그것은 노동자에서 호출되고 있기 때문에 나는 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

내 클로이 스크립트 내에서 메인 스레드에서만 실행되어야하는 코드가 있음을 제안합니다. 그러나 내 문제는 컴파일 된 자바 스크립트 자체가 컨텍스트를 공유하는 작업자에게 자바 스크립트 파일에 대한 경로와 문서를 작성해야한다는 것입니다. 당신이 제안하는 것을하는 것은 이것을 해결하지 못할 것입니다. 집사 사용은이 질문에 실제로 대답하지 않습니다. –

+0

작업자 js 파일을 컴파일하는 데 어떤 수준의 최적화를 사용합니까? – Asher

+0

귀하의 질문을 이해할 수 있는지 잘 모르겠습니다. 동일한 boot + adzerk 컴파일은 작업자 파일과 주 파일 모두에 동일하고 동일하게 사용됩니다. 이후로 clojurescript 컴파일에 대한보다 기본적인 접근 방식을 사용하여 어떻게 작동하는지 배우기로 결정했습니다. 다음으로 문서 작성이 추가 된 곳과 이유를 볼 때까지 기능을 추가 할 수 있습니다. 그러나 가상의 worker.js 파일의 경우 js에서 직접 코딩되었으므로 예기치 않은 컴파일이 발생하지 않을 것이라고 언급했습니다. –