考虑一个Clojure项目,其中包含一些文件和另一个名为"public“的文件夹,其中包含一些web内容。
我正在寻找一个引导任务,它编译ClojureScript,然后将公共目录移动到全局文件系统中的另一个目录。最后,文件夹应该重命名为“项目-版本”。
以下操作不起作用,因为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,它包含项目所有公共文件的编译版本。
发布于 2016-08-15 21:23:52
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构建之外执行它本身可能是一张票。
发布于 2016-08-15 21:41:03
受到评论和回答的启发,我将在这里发表我的看法:
(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来自社区任务(启动-复制和引导-文件),但是它看起来像内置的sift,与target相结合,在这种情况下更加通用和完美。
https://stackoverflow.com/questions/38962178
复制相似问题