2016-03-23 5 views
0

Angenommen, Sie verwenden Leiningen, und Sie möchten eine Abhängigkeit zu Ihrer Projekt.clj-Datei hinzufügen.Code als Daten: eine Clojure-Datei programmgesteuert aktualisieren

Anstatt den Editor zu öffnen und manuell hinzuzufügen, muss dies programmgesteuert über die Clojure-Sprache möglich sein. Wie so:

(update-in :dependencies conj ["enlive" "1.1.3"]) 

leins Update-in hilft nicht, da es die Änderung nicht für gut macht.

Wie würdest du das machen?

Antwort

1

Da project.clj eine Clojure-Datei ist, können Sie diese setzen an der Spitze Ihrer project.clj Datei:

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

..und später:

:dependencies my-deps 

was bedeutet, dass Sie könnte sogar slurp eine .edn Datei, die Sie bearbeiten können, wie Sie wollen. Ich habe tatsächlich diese auf der Spitze meiner build.boot (entspricht project.clj aber für boot):

(defn slurp-deps [] 
    (read-string (slurp "resources/deps.edn"))) 

Und ich benutze es etwa so:

:dependencies (slurp-deps) 

Der Rest würde Ihre Karte einfach updaten und writing es zurück zur gleichen .edn Datei.

Wenn Sie Ihre Abhängigkeiten nachladen möchten, dann sehen Sie sich diese SO question an.

Hinweis: als Alternative, weiß ich, dass dies der Weg ist, die Dinge in einem REPL mit boot zu tun, und dass es Abruf-/lädt die Abhängigkeiten:

boot.user=> (set-env! 
     #_=> :resource-paths #{"src"} 
     #_=> :dependencies '[["enlive" "1.1.3"]]) 
Verwandte Themen