有多种方法可以优化您的开发工作流程:
- 在源文件更改时重新加载命名空间
- 使用 lein-ring 插件进行设置
- boot 设置
- 使用一个模块生命周期的管理库 参看交互环境(Interactive Development)
第一种方法更快速,且易于设置。ring-devel 库中为此提供了中间件。
不过,命名空间重新加载并不会重新加载应用程序的状态。因此,某些情况下,您可能需要重新启动服务器。
使用 lein-ring 插件进行设置
lein-ring 插件是最直接的方式。创建两个文件
- src/sample.clj
- project.clj
src/sample.clj 中提供了一个简单的服务: 返回 'Hello World'.
- (ns sample)
- (defn handler [request]
- {:status 200
- :headers {"Content-Type" "text/plain"}
- :body "Hello world."})
将 lein-ring 添加到您的 project 文件中, 然后在 src/sample.clj 中配置下 ring handler:
:ring {:handler sample/handler}
一个最小的 project.clj 文件如下:
- (defproject lein-demo "0.1.0-SNAPSHOT"
- :dependencies [[org.clojure/clojure "1.8.0"]
- [ring/ring-core "1.6.3"]
- [ring/ring-jetty-adapter "1.6.3"]
- [ring/ring-devel "1.6.3"]]
- :ring {:handler sample/handler}
- :plugins [[lein-ring "0.12.1"]])
启动一个开发服务器:
- lein ring server
访问服务器地址: http://localhost:3000
服务器将自动重新加载源目录中的任何已修改的文件。
设置 boot
Boot是Clojure的一个构建工具,http://boot-clj.com
创建两个文件
- build.boot
- src/sample.clj
一个最小的 build.boot 内容如下
- (set-env!
- :resource-paths #{"src"}
- :dependencies '[[org.clojure/clojure "1.8.0"]
- [ring/ring-core "1.6.3"]
- [ring/ring-jetty-adapter "1.6.3"]
- [ring/ring-devel "1.6.3"]])
- (deftask dev
- "Run server hot reloading Clojure namespaces"
- [p port PORT int "Server port (default 3000)"]
- (require '[sample :as app])
- (apply (resolve 'app/run-dev-server) [(or port 3000)]))
src/sample.clj 中提供了一个简单的服务: 返回 'Hello World'.
- (ns sample
- (:require
- [ring.adapter.jetty :refer [run-jetty]]))
- (defn handler [request]
- {:status 200
- :headers {"Content-Type" "text/plain"}
- :body "Hello world"})
- (defn run-dev-server
- [port]
- (run-jetty handler {:port port}))
检查您的启动任务
boot dev -h
运行服务器
boot dev
接下来,我们可以添加热加载。检查build.boot中的依赖项是否包含 ring/ring-devel。将之前的 handler 包装到 wrap-reload handler 中。
- (ns sample
- (:require
- [ring.adapter.jetty :refer [run-jetty]]
- [ring.middleware.reload :refer [wrap-reload]]))
- (defn handler [request]
- {:status 200
- :headers {"Content-Type" "text/plain"}
- :body "Hello world"})
- (def dev-handler
- (wrap-reload #'handler))
- (defn run-dev-server
- [port]
- (run-jetty dev-handler {:port port}))
重新启动服务器并访问 http://localhost:3000
现在,服务器将自动重新加载源目录中的任何已修改的文件。
当前内容版权归 clojure-china 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 clojure-china .