首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >boot-clj:只从文件集中提取特定文件夹的任务+重命名它

boot-clj:只从文件集中提取特定文件夹的任务+重命名它
EN

Stack Overflow用户
提问于 2016-08-15 20:00:48
回答 2查看 266关注 0票数 1

考虑一个Clojure项目,其中包含一些文件和另一个名为"public“的文件夹,其中包含一些web内容。

我正在寻找一个引导任务,它编译ClojureScript,然后将公共目录移动到全局文件系统中的另一个目录。最后,文件夹应该重命名为“项目-版本”。

以下操作不起作用,因为move-files只对文件工作,而不对目录工作。然而,我认为它澄清了这个想法:

代码语言:javascript
复制
(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,它包含项目所有公共文件的编译版本。

EN

回答 2

Stack Overflow用户

发布于 2016-08-15 21:23:52

sifttarget可能会帮助你(boot sift -h)。

我所做的事情与您在这里描述的类似:https://github.com/timothypratley/voterx/blob/master/build.boot

代码语言:javascript
复制
(sift :invert true :include #{#"js/devcards.out" #"js/app\.out" #"\S+\.cljs\.edn"})
(target :dir #{"public"})

target将文件放在特定的输出目录中,我相信您可以根据版本来更改它。有点像(str "public" +version+)

总之,在cljs构建之外执行它本身可能是一张票。

票数 1
EN

Stack Overflow用户

发布于 2016-08-15 21:41:03

受到评论和回答的启发,我将在这里发表我的看法:

代码语言:javascript
复制
(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-filescopy来自社区任务(启动-复制和引导-文件),但是它看起来像内置的sift,与target相结合,在这种情况下更加通用和完美。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38962178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档