【问题标题】:Using a Clojure/ClojureScript crossover library使用 Clojure/ClojureScript 交叉库
【发布时间】:2013-03-27 21:17:01
【问题描述】:

我正在开发一个可同时使用 Clojure 和 ClojureScript 的库。

这是该库的 project.clj:

(defproject libtest "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.4.0"]]
  :plugins [[lein-cljsbuild "0.3.0"]]
  :cljsbuild
    {:crossovers [libtest],
     :crossover-jar true
     :jar true
    :builds
    [{:source-paths ["src/libtest"], :crossover-path "src/libtest"}]})

我将它作为依赖项包含在另一个项目中。为了让它在我的项目的 ClojureScript 端工作,我必须在我的 project.clj 的 cljsbuild 键下添加确切的命名空间作为交叉点:

 (defproject some-other-project
    ...
    :dependencies [[org.clojure/clojure "1.5.0"]
                   [libtest "0.1.0-SNAPSHOT"]]
    :cljsbuild {
        :builds [{
    ...
            :crossovers [libtest.core]
    ...

我的问题是,这有必要吗?如果它在类路径上,为什么我必须明确告诉它我要使用哪些命名空间? 如果我需要使用几十个命名空间,这不能很好地扩展,其中一些会引用其他命名空间等。

【问题讨论】:

    标签: clojure clojurescript


    【解决方案1】:

    这不是一个完美的解决方案,但对我有用。当命名空间被指定为交叉时,它的子代被递归添加。所以:crossovers [libtest] 也会添加libtest.core。如果您指定:crossover-path,您可以看到在该目录中生成了哪些文件。

    【讨论】:

    • 这适用于库本身的 project.clj,但不适用于正在使用该库的项目。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多