使用 Boot 时将 to/move 编译的 Cljs 构建到任意目录的惯用方法是什么?
What is the idiomatic way to build to/move compiled Cljs to an arbitrary directory when using Boot?
我正在使用 ClojureScript、Boot 和 Boot-Cljs 构建 Firefox 附加组件。 Firefox 的 Add-On SDK 采用特定的目录结构;在我的例子中,我需要一个 project-root/data
目录,它将存放我的 contentScriptFile
.
我应该如何构建位于 project-root/src/foo/core.cljs
中的 ClojureScript 文件并将其输出或移动到 project-root/data
?我试过使用 boot sift --move
无济于事(我承认我不完全理解这个任务应该如何工作,需要哪些参数等等),使用 main.cljs.edn
清单并调整它的位置, :asset-path
, :output-path
, 等无济于事.
;; src/main.cljs.edn
{:require [foo.core]
:init-fns [foo.core/init!]
:compiler-options {:output-path "data"}}
;; build.boot
(set-env!
:source-paths #{"src" "data"}
:dependencies '[[org.clojure/clojure "1.7.0"]
[org.clojure/clojurescript "1.7.170"]
[adzerk/boot-cljs "1.7.170-3"]])
(require '[adzerk.boot-cljs :refer [cljs]])
(deftask build []
(comp (cljs :optimizations :whitespace)))
我对 Boot 很感兴趣,想解决这个问题,但我不得不承认,我在这上面浪费了 很多 时间 (and it looks like I'm not alone ).既然我已经有了一个简单的、可工作的 Clojure 脚本,它直接调用 ClojureScript 编译器——并使用 :output-to
来做我需要的——我可能会回到那种方法来结束这个实验。
关于 Boot 的奇怪之处似乎让您有些困惑,那就是任务 - 例如 cljs
任务 - 不一定直接与文件系统交互。它们与 FileSet 交互,它们被传递给 return.
的一种不可变值
在构建开始时,Boot 将磁盘上的文件收集到构建的第一个 FileSet 中。然后,它通过任务堆栈将 FileSet 线程化。最后,Boot 将上一个任务 returned 的 FileSet 写入 target directory.
Boot 的 sift
任务可用于在 FileSet 中 移动文件,return创建一个新的 FileSet ,但不能将文件移出目标目录。
长话短说,我想你可以像这样指定要启动的目标目录来做你想做的事:
(set-env! :target-path "data" ...)
这项任务可能有帮助:
(deftask public []
(comp (production)
(build)
(sift :invert true :include #{#"js/app.out" #"js/app.cljs.edn"})
(target :dir #{"data"})))
我正在使用 ClojureScript、Boot 和 Boot-Cljs 构建 Firefox 附加组件。 Firefox 的 Add-On SDK 采用特定的目录结构;在我的例子中,我需要一个 project-root/data
目录,它将存放我的 contentScriptFile
.
我应该如何构建位于 project-root/src/foo/core.cljs
中的 ClojureScript 文件并将其输出或移动到 project-root/data
?我试过使用 boot sift --move
无济于事(我承认我不完全理解这个任务应该如何工作,需要哪些参数等等),使用 main.cljs.edn
清单并调整它的位置, :asset-path
, :output-path
, 等无济于事.
;; src/main.cljs.edn
{:require [foo.core]
:init-fns [foo.core/init!]
:compiler-options {:output-path "data"}}
;; build.boot
(set-env!
:source-paths #{"src" "data"}
:dependencies '[[org.clojure/clojure "1.7.0"]
[org.clojure/clojurescript "1.7.170"]
[adzerk/boot-cljs "1.7.170-3"]])
(require '[adzerk.boot-cljs :refer [cljs]])
(deftask build []
(comp (cljs :optimizations :whitespace)))
我对 Boot 很感兴趣,想解决这个问题,但我不得不承认,我在这上面浪费了 很多 时间 (and it looks like I'm not alone ).既然我已经有了一个简单的、可工作的 Clojure 脚本,它直接调用 ClojureScript 编译器——并使用 :output-to
来做我需要的——我可能会回到那种方法来结束这个实验。
关于 Boot 的奇怪之处似乎让您有些困惑,那就是任务 - 例如 cljs
任务 - 不一定直接与文件系统交互。它们与 FileSet 交互,它们被传递给 return.
在构建开始时,Boot 将磁盘上的文件收集到构建的第一个 FileSet 中。然后,它通过任务堆栈将 FileSet 线程化。最后,Boot 将上一个任务 returned 的 FileSet 写入 target directory.
Boot 的 sift
任务可用于在 FileSet 中 移动文件,return创建一个新的 FileSet ,但不能将文件移出目标目录。
长话短说,我想你可以像这样指定要启动的目标目录来做你想做的事:
(set-env! :target-path "data" ...)
这项任务可能有帮助:
(deftask public []
(comp (production)
(build)
(sift :invert true :include #{#"js/app.out" #"js/app.cljs.edn"})
(target :dir #{"data"})))