代码作为数据:以编程方式更新clojure文件

时间:2016-03-23 09:43:02

标签: clojure leiningen

假设您正在使用leiningen并且想要为project.clj文件添加依赖项。

不是打开你的编辑器并手动添加它,而是必须可以通过clojure语言以编程方式执行此操作。像这样:

(update-in :dependencies conj ["enlive" "1.1.3"])
莱因的更新并没有帮助,因为它没有做出改变。

你们会怎么做?

1 个答案:

答案 0 :(得分:1)

由于project.clj是Clojure文件,您可以将其放在project.clj文件的顶部:

(def my-deps [["enlive" "1.1.3"]])

..以及后来:

 :dependencies my-deps

这意味着你甚至可以slurp .edn一个你可以编辑的build.boot文件。实际上,我在project.clj(相当于boot但是(defn slurp-deps [] (read-string (slurp "resources/deps.edn"))) )的顶部有这个:

:dependencies (slurp-deps)

我这样使用它:

.edn

其余的只是更新您的地图,并writing将其更新回相同的boot.user=> (set-env! #_=> :resource-paths #{"src"} #_=> :dependencies '[["enlive" "1.1.3"]]) 文件。

如果您想在之后重新加载依赖项,请查看此SO question

注意:作为替代方案,我知道这是使用boot在REPL中执行操作的方法,并且它将获取/加载依赖项:

{{1}}