为Compojure应用程序自动构建Clojurescript文件

时间:2014-01-04 05:08:50

标签: clojure leiningen clojurescript cljsbuild

我有一个Web应用程序,我在服务器上使用Compojure,在客户端使用Clojurescript。我使用leing-cljsbuild插件自动将cljs文件编译为js。

当我将优化设置为:whitespace:simple时,我能够生成所需的客户端文件并在浏览器中加载它们,但是当我将优化设置为无时,{ {1}}文件使用本地文件系统路径引用它们的依赖项,这导致文件在浏览器中根本没有加载。

所以,我的问题是如何让生成的文件在clojurescript编译器生成时使用服务器URL而不是本地文件路径。

这是我的project.clj文件

js

2 个答案:

答案 0 :(得分:2)

我认为唯一有效的优化值是:whitespace,:simple或:advanced。见https://github.com/emezeske/lein-cljsbuild/blob/1.0.1/sample.project.clj处的第96行。

因此我会使用:whitespace作为优化级别(至少可以使某些工作起作用)。

根据您的帖子,优化级别为:空白有效吗?因此,也许你可以详细说明。

您期望从“:none”的优化级别获得什么结果。您的预期结果与以下优化级别:空白产生的结果有何不同?

优化级别:none表示cljsbuild不会从您的cljs源生成js(它将生成一些goog.include语句,但没有其他内容)。尝试使用交互式repl来帮助您进行原型设计。尝试运行以下命令:lein trampoline cljsbuild repl-rhino

希望有所帮助。

答案 1 :(得分:0)

我的设置大致相同,优化设置为:none,生成的文件使用本地路径。但是,浏览器会加载脚本。

我所拥有的是index.html

<script src="js/development/goog/base.js" type="text/javascript"></script>
<script src="js/development/main.js" type="text/javascript" ></script>
<script type="text/javascript">goog.require("ixtlan.core");</script>

这在project.clj

:cljsbuild {
  :builds [{:id "dev"
    :source-paths ["src/cljs"]
    :compiler {
      :output-to "resources/public/js/development/main.js"
      :output-dir "resources/public/js/development"
      :optimizations :none
      :source-map true}}
          ...

和路线包含:

(defroutes routes
  (GET "/" [] (index))
    (route/files "/" {:root "resources/public"}))

希望,这有帮助。