使用lein

时间:2015-08-11 21:57:48

标签: clojure leiningen clojurescript cljc

cljc / lein / clojurescript有效吗?

我之前使用的是cljx,并且能够使用cljx插件编译同一个项目,以便lein触发cljsbuild任务。

现在我切换到cljc,我想将我的cljc文件编译成编译的Java和javascript,以便在浏览器中使用。

这是我当前的project.clj文件

(defproject com.mysite/myproj "0.3.2-SNAPSHOT"
  :description ""
  :url ""
  :license {:name "Gnu Lesser Public License"
            :url "https://www.gnu.org/licenses/lgpl.html"}    
  :dependencies [[org.clojure/clojure "1.7.0"]]    
  :plugins [[lein-cljsbuild "1.0.3"]
            [lein-localrepo "0.4.0"] ]    
  :source-paths ["cljc" "src" ]    
  :cljsbuild {:builds [{
                        :source-paths ["cljc"  ]
                        :compiler {
                                   :output-to "browser-based/js/main.js"
                                   :optimizations :whitespace
                                   :pretty-print true }
                        } ]}    
  :hooks [leiningen.cljsbuild]
  :aot [myproj.core]
  :main myproj.core)

我不记得我从哪里复制了一些,但我认为leiningen.cljsbuild钩子是自动触发cljs构建过程的。但是在删除cljx插件并转移到cljc之后,这已经成功编译了我的程序的Java版本,但似乎没有生成任何javascript。

1 个答案:

答案 0 :(得分:2)

是的,它有效。

尝试:

(defproject com.mysite/myproj "0.3.2-SNAPSHOT"
  :description ""
  :url ""
  :license {:name "Gnu Lesser Public License"
            :url "https://www.gnu.org/licenses/lgpl.html"}    
  :dependencies [[org.clojure/clojure "1.7.0"]
                 [org.clojure/clojurescript "1.7.28"]    
  :plugins [[lein-cljsbuild "1.0.6"]
            [lein-localrepo "0.4.0"]]   
  :source-paths ["cljc" "src"]    
  :cljsbuild {:builds [{
                        :source-paths ["cljc" "src"]
                        :compiler {:output-to "browser-based/js/main.js"
                                   :optimizations :whitespace
                                   :pretty-print true}}]}    
  :hooks [leiningen.cljsbuild])

然后运行:lein compilelein cljsbuild once

请注意,我已将:source-paths更改为:cljsbuild以包含" src"::source-paths ["cljc" "src"]。除此之外,我添加了对clojurescript的明确依赖,并将cljsbuild版本增加到1.0.6

顺便问一下,为什么你有一个单独的cljc目录?你可以拥有你的cljc,clj& cljs文件共享相同的目录结构。