Boot-clj:任务只从文件集中提取特定文件夹并将其重命名



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

我正在寻找一个启动任务,它编译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,其中包含项目所有公共文件的编译版本。

sifttarget可能会帮助你(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-filescopy,我之前尝试使用的,来自社区任务(引导复制&但是,它看起来像内置的sift,结合target更通用,更适合这种情况。

相关内容

  • 没有找到相关文章

最新更新