gpt4 book ai didi

firefox-addon-sdk - 使用 Boot 时,将已编译的 Cljs 构建到/移动到任意目录的惯用方法是什么?

转载 作者:行者123 更新时间:2023-12-04 07:50:28 27 4
gpt4 key购买 nike

我正在使用 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 list 并调整其位置、: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 互动,它们被传递并期望返回的一种不可变值。

在构建开始时,Boot 将磁盘上的文件收集到构建的第一个 FileSet 中。然后,它通过任务堆栈将 FileSet 线程化。最后,Boot 将上一个任务返回的 FileSet 写入 target directory .

Boot 的sift 任务可用于在 FileSet 中移动文件,返回一个新的 FileSet,但不能将文件移动到目标目录之外。

长话短说,我认为您可以像这样指定要启动的目标目录来做您想做的事:

(set-env!:target-path "data"...)

关于firefox-addon-sdk - 使用 Boot 时,将已编译的 Cljs 构建到/移动到任意目录的惯用方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34259030/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com