5

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

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

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

这是我的 project.clj 文件

(defproject my-proj-clj "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"

  :dependencies [[org.clojure/clojure "1.5.1"]
                 [compojure "1.1.6"]
                 [org.clojure/tools.nrepl "0.2.3"]
                 [hiccup "1.0.3"]
                 [com.novemberain/monger "1.5.0"]
                 [org.clojure/clojurescript "0.0-2127"]
                 [jayq "2.5.0"]
                 ]

  :plugins [[lein-ring "0.8.8"]
            [lein-cljsbuild "1.0.1"] 
            ]

  :ring {:handler my-proj-clj.handler/app
                   }

  :cljsbuild { :builds 
              [{
                :source-paths ["src/my-proj-clj"]
                :compiler {
                           :output-dir "./resources/public/js"
                           :output-to "./resources/public/js/cljs-file.js"  
                           :pretty-print true
                           :source-map "./resources/public/js/cljs-file.js.map"
                           :optimizations :none
                           }}]}  

  :profiles {:dev {:dependencies [[javax.servlet/servlet-api "2.5"]]}}
4

2 回答 2

2

我相信唯一有效的优化值是 :whitespace、:simple 或 :advanced。请参阅https://github.com/emezeske/lein-cljsbuild/blob/1.0.1/sample.project.clj的第 96 行。

因此,我会使用 :whitespace 作为优化级别(至少可以让某些东西正常工作)。

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

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

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

希望有帮助。

于 2014-01-05T22:28:05.447 回答
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"}))

希望这可以帮助。

于 2014-04-11T22:47:11.487 回答