为Compojure应用程序自动生成Clojurescript文件

为Compojure应用程序自动生成Clojurescript文件,clojure,leiningen,clojurescript,cljsbuild,Clojure,Leiningen,Clojurescript,Cljsbuild,我有一个web应用程序,在服务器上使用Compojure,在客户端使用Clojurescript。我正在使用leing cljsbuild插件将cljs文件自动编译为js 当我将优化设置为:whitespace或:simple时,我能够生成所需的客户端文件并在浏览器中加载它们,但当我将优化设置为none时,js文件使用本地文件系统路径引用它们的依赖项,这会导致文件根本不在浏览器中加载 因此,我的问题是,当clojurescript编译器生成文件时,如何使生成的文件使用服务器URL而不是本地文件路

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

当我将优化设置为
:whitespace
: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"]]}}

我相信唯一有效的优化值是:空白、:简单或:高级。见第96行

因此,我将使用:空白作为优化级别(至少是为了让某些东西正常工作)

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

如果优化级别为“无”,您希望得到什么样的结果。您的预期结果与优化级别的:空白产生的结果有何不同

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


希望有帮助。

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

我在
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>
路线包括:

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

希望,这有帮助。

我没有做任何CLJ,但我认为a是用于将“预编译”代码映射到“编译”代码的,与代码中的URL没有任何关系。是的,对不起。源代码映射对我来说很好,只有当我将优化设置为:none时,我才会遇到问题。While:whitespace有效,编译时间大约为7秒,而使用:none编译只需要不到1秒的时间,所以我希望加快开发。在编辑cljs源文件时运行lein cljsbuild auto。这将加快发展进程。请考虑编辑原来的帖子。您的问题听起来与“文件使用本地文件系统路径引用其依赖项”无关?如果有,请张贴一个例子?你的问题是加快发展进程,对吧。不是生成文件引用?我正在使用
lein cljsbuild auto
编译cljs文件(当优化设置为:空白或:简单等时,编译仍然需要大约6秒钟)。这两个问题是相互关联的,当优化设置为:空白输出js文件正确设置其依赖项(闭包文件、我的项目的cljs文件等)的服务器路径。但是,当我将其设置为:none时,它似乎在生成cljs文件时使用了本地文件路径,例如(../../my cljs file.cljs)。对:none进行优化意味着cljsbuild不会从您的cljs源生成js。将命令行和js输出在2到2个选项级别之间进行比较。在两个版本之间执行lein cljsbuild CLINE cljsbuild CLINE(保证新的输出)。如果你想原型化你的cljs代码,试着运行一个repl:“lein trampoline cljsbuild repl rhino”。希望有帮助。我运行了
lein cljsbuild clean
,然后将优化设置为:none,然后运行
lein cljsbuild auto
,cljs文件正在编译为相应的js文件。单个输出文件对其他依赖项和我生成的js文件有几个require调用。不幸的是,它使用了本地文件路径,例如
goog.addDependency(“../clojure/string.js”、['clojure.string']、['cljs.core'、'goog.string'、'goog.string.StringBuffer']);goog.addDependency(“../cljs/reader.js”,['cljs.reader'],['cljs.core','goog.string'])
(defroutes routes
  (GET "/" [] (index))
    (route/files "/" {:root "resources/public"}))