• Boot
    • task
    • Boot environment
    • Java environment
    • target
    • fileset
    • Options
    • 例子

    Boot

    Boot 是一个建构工具 http://boot-clj.com/

    1. brew install boot-clj

    类似 Gulp, 基于 task 进行组合以及运行, 社区有一些常用插件:

    https://github.com/boot-clj/boot/wiki/Community-Tasks

    Boot 通过命令行启动, 通过 build.boot 文件配置.
    build.boot 实际上是一个 Clojure 脚本, 运行时被读取.

    task

    任务, 大概相当于 Gulp 里的 task, 可以从命令行调用.
    任务可以进行组合, 一次顺序执行多个任务.
    简单的 task 可以通过这个 Macro 定义:

    1. (deftask null-task
    2. "Does nothing."
    3. []
    4. (fn [next-task]
    5. (fn [fileset]
    6. (next-task fileset))))

    多个 task 可以通过 comp 函数组合然后执行:

    https://github.com/boot-clj/boot/wiki/Tasks

    Boot environment

    Boot 的环境变量, 通过 set-env! 进行修改, 常用的环境变量:

    • resource-paths 作为源码输入, 也能够进入 jar 包里
    • source-paths 作为源码输入, 但不能进入 jar 包里
    • asset-paths 作为静态资源输入, 也能够进入 jar 包里
    • dependencies 整个项目的依赖

    完整的环境变量的列表参考 Wiki:

    https://github.com/boot-clj/boot/wiki/Boot-Environment

    Java environment

    大致相当于 Boot 的配置文件, 主要是一般可以是:

    1. =>> cat ~/.boot/boot.properties
    2. #http://boot-clj.com
    3. #Wed Mar 23 17:58:25 CST 2016
    4. BOOT_CLOJURE_NAME=org.clojure/clojure
    5. BOOT_CLOJURE_VERSION=1.8.0
    6. BOOT_VERSION=2.5.5
    7. BOOT_EMIT_TARGET=no

    注意 BOOT_EMIT_TARGET 这个环境变量在 Boot 中有过大的调整.
    原来 Boot 默认会输入内容到 target, 后来建议关闭这个行为.

    https://github.com/boot-clj/boot/wiki/Configuring-Boot

    target

    target 现在是一个 task, 运行 task 会把文件默认输出到 target/ 路径.
    target task 调用时可以通过 :dir 设置路径的位置, 但一般不用设置.

    1. (target :dir #{"compiled/"})

    fileset

    大致可以认为是文件的集合, 也是 task 之间传递的主要内容.
    从前面提到的 source-paths 等路径开始读取, 但根据参数不同而有不同特性.
    其实 task 运行主要就是针对文件操作, 其中经常用到临时文件.
    相对于 Gulp 使用文件流, Boot 使用的是 fileset 和临时文件.

    https://github.com/boot-clj/boot/wiki/Filesets

    Options

    定义 task 参数时, 可以通过这套 DSL 定义参数的名称和类型,
    一般不写 task 或者插件不需要深入. 比较复杂, 需要看文档才能明白用途:

    1. (deftask options
    2. "Demonstrate the task options DSL."
    3. [a a-option VAL kw "The option."
    4. c counter int "The counter."
    5. e entry VAL sym "An entrypoint symbol."
    6. f flag bool "Enable flag."
    7. o o-option VAL str "The other option."]
    8. *opts*)

    https://github.com/boot-clj/boot/wiki/Task-Options-DSL

    例子

    一个编译 cljs 的简单配置, 编译 src/ 里的文件到 target/:

    1. (set-env!
    2. :dependencies '[[org.clojure/clojurescript "1.9.36" :scope "test"]
    3. [org.clojure/clojure "1.8.0" :scope "test"]
    4. [adzerk/boot-cljs "1.7.170-3" :scope "test"]])
    5. (require '[adzerk.boot-cljs :refer [cljs]])
    6. (deftask build-advanced []
    7. (set-env!
    8. :source-paths #{"src"})
    9. (comp
    10. (cljs :optimizations :advanced)
    11. (target)))