为cljs中的工作人员需要多个文件

为cljs中的工作人员需要多个文件

问题描述:

当前我正在尝试使用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文档。 有什么办法可以解决这个问题?我曾想过做一个单独的worker.js文件,并填写它:

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

会的工作,但我还没有与这样的成功呢。根据maggimo,我使用引导来组织我的cljs。我的js文件存储在js目录下。如果我没有提供任何必要的细节,请说出来,我会编辑。

当仆人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

你在暗示我的clojurescript中有代码只能在主线程上执行。然而,我的问题是,我需要为工作人员共享上下文而编译的javascript本身将路径写入文档的JavaScript文件。做你的建议不会解决这个问题。使用管家并没有真正回答这个问题。 –

+0

您使用什么级别的优化来编译您的worker js文件? – Asher

+0

我不知道我理解你的问题。相同的boot + adzerk编译既用于工作文件又用于主文件,因为它们是相同的。我从那以后决定尝试使用更基本的clojurescript编译方法来了解它是如何工作的。接下来,我可以添加功能,直到我看到添加文档的位置和原因。然而,对于我提到的假想的worker.js文件,它不会有意外的编译,因为它是直接在js中编码的。 –