1

考虑一个具有资源文件夹的 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,其中包含项目所有公共文件的编译版本。

4

2 回答 2

1

受到评论和答案的启发,我将在这里发布我采取的方式:

(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更通用,更适合这种情况。

于 2016-08-15T21:41:03.257 回答
1

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-15T21:23:52.800 回答