boot-clj: задача извлечь только определенную папку из набора файлов + переименовать ее
Рассмотрим проект Clojure с папкой ресурсов, которая содержит несколько файлов, и еще одну папку с именем public, содержащую некоторый веб-контент.
Я ищу загрузочную задачу, которая компилирует ClojureScript, а затем перемещает только публичный каталог в другой каталог в глобальной файловой системе. Наконец, папка должна быть переименована в "project-version".
Следующее не работает, так как move-files
работает только для файлов, а не для каталогов. Тем не менее, я думаю, что это проясняет идею:
(def project-name "My")
(def project-version "0.1.0")
(deftask store-web-dir []
(let [dir-name (format "%s-%s" project-name project-version)]
(comp
(cljs :optimizations :advanced)
(move-files :files {"public" dir-name}) ;; should rename the dir public to ..
(copy :output-dir "/some/path/web_dirs"
:matching #{(re-pattern (str "^" dir-name "$"))}))))
После этого должна быть папка /some/path/web_dirs/My-0.1.0
, который содержит скомпилированную версию всех общедоступных файлов проекта.
2 ответа
sift
а также target
может помочь тебе (boot sift -h
).
Я делаю нечто похожее на то, что вы описываете здесь: https://github.com/timothypratley/voterx/blob/master/build.boot
(sift :invert true :include #{#"js/devcards.out" #"js/app\.out" #"\S+\.cljs\.edn"})
(target :dir #{"public"})
target помещает файлы в определенный выходной каталог, я уверен, что вы можете изменить его в зависимости от версии. Что-то вроде (str "public" +version+)
Таким образом, выполнение этого за пределами самой сборки cljs, вероятно, является билетом.
Вдохновленный комментариями и ответами, я опубликую способ, которым я взял здесь:
(deftask only-public []
(comp
(sift :include #{#"^public"})
(sift :move {#"^public/(.*)$" "$1"})))
(deftask store-web-dir []
(comp
(cljs :optimizations :advanced)
(only-public)
(target :dir #{(format "/some/path/web_dirs/%s-%s"
project-name project-version)})))
Функции move-files
а также copy
те, которые я пытался использовать ранее, происходят из задач сообщества (boot-copy & boot-files), однако это выглядит как встроенный sift
, в сочетании с target
гораздо более общий и идеально подходит для этого случая.