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