Как избежать дублирования в проекте cljsbuild?
:cljsbuild
раздел моего project.clj
имеет много дубликатов:
:cljsbuild {
:builds {:dev {:source-paths ["src-cljs"]
:compiler {:output-dir "resources/public/js"
:output-to "resources/public/js/main.js"
:optimizations :whitespace
:pretty-print true
:source-map "resources/public/js/main.map"
:language-in :ecmascript5
:foreign-libs [{:file "third-party/mutation-summary/mutation-summary.js"
:provides ["MutationSummary"]}]}}
:production {:source-paths ["src-cljs"]
:compiler {:output-to "resources/public/js/main-min.js"
:optimizations :advanced
:pretty-print false
:language-in :ecmascript5
:foreign-libs [{:file "third-party/mutation-summary/mutation-summary.js"
:provides ["MutationSummary"]}]}}
:test {:source-paths ["src-cljs" "test-cljs"]
:compiler {:output-to "resources/private/js/unit-test.js"
:optimizations :whitespace
:pretty-print true
:language-in :ecmascript5
:preamble ["react/react.min.js"]
:externs ["react/externs/react.js"]
:foreign-libs [{:file "third-party/mutation-summary/mutation-summary.js"
:provides ["MutationSummary"]}]}}}
:test-commands {"unit-tests" ["slimerjs" :runner
"resources/private/js/unit-test.js"]}}
Я уверен, что должно быть возможно использовать профили, чтобы удалить это дублирование, но мой фу Лейнинген отсутствует.
1 ответ
Решение
Не очень красивое, но жизнеспособное решение - добавить def
или же defn
выше вашего defproject
содержит стандартные параметры, которые вы используете повторно, например: (не проверено орфографией и не работает)
(def defaults
"Returns default compiler options"
{:language-in :ecmascript5
:foreign-libs [{:file "third-party/mutation-summary/mutation-summary.js"
:provides ["MutationSummary"]}]})
А потом merge
эта карта с пользовательскими значениями:
:builds {:dev {:source-paths ["src-cljs"]
:compiler (merge defaults {:pretty-print true})