clojure - 自动刷新/自动重新加载资源

标签 clojure clojurescript ring

我是 clojure 新手,当对 html/js/css 等进行更改时,我很难弄清楚如何重新加载/刷新浏览器。

这是我当前的设置project.clj

(defproject app2 "0.1.0-SNAPSHOT"
  :description "FIXME: write this!"
  :url "http://exampl.com/FIXME"
  :dependencies [[org.clojure/clojure "1.8.0"]
                 [org.clojure/clojurescript "1.9.89"]
                 [ring/ring-core "1.5.0"]
                 [ring/ring-jetty-adapter "1.5.0"]
                 [enfocus "2.0.0-SNAPSHOT"]]
  :plugins [[lein-cljsbuild "1.1.3"]
            [lein-ring "0.9.7"]]
  :cljsbuild {:builds [{:source-paths ["src/cljs"],
                        :compiler {
                          :main "scripts.client"
                          :output-to "resources/public/js/main.js"
                          :output-dir "resources/public/js/out"
                          :asset-path "js/out"
                          ;;:pretty-print true
                          ;;:optimizations :none
                          }}]}
  :main app2.server/app
  :ring {:handler app2.server/app :auto-reload? true :auto-refresh? true :reload-paths ["src" "resources"]}
  :profiles {
    :dev {
            :ring {
              :nrepl {
                :start? true
                :port 9000
              }
            }
          }
   }
  )

这是我的server.clj

(ns app2.server
  (:use [ring.middleware.resource :only [wrap-resource]]
        [ring.middleware.file-info :only [wrap-file-info]]
        [ring.middleware.reload :refer [wrap-reload]])

        ;;(:require app2.repl)
)


(defn handler
    [request]
    {:status 200}

  )

;handling routing "/" -> "/index.html"
(defn wrap-index [handler]
  (fn [req]
    (println (pr-str req))
    (if (= (:uri req) "/")
      (handler (assoc req :uri "/index.html"))
      (handler req))))

;setting up a simple resource handler for ring
(def app (-> handler
             (wrap-resource "public")
             (wrap-file-info)
             (wrap-index)
             (wrap-reload app {:dirs ["src" "resources"]})
             ))

如何实现这一点?

我习惯在 Node 中进行开发,并且有浏览器同步、weinre 和 Supervisor 等工具。 Clojure 中的等价物是什么?

最佳答案

我建议你看看figwheel ,它允许您在浏览器中对 ClojureScript 和 CSS 进行热重载

当然没有一种好的方法来设置你的构建,但我选择 SASS 等语言的方法是将它们作为单独的过程进行观察和编译,并让 Figwheel 观察生成的 CSS。

例如,在我的一个 ClojureScript 项目中,我有一个用于 LESS 编译的脚本文件,该文件使用 LESS 编译器和 wr直接使用实用程序:

#!/usr/bin/env bash
lessc src/styles/main.main.less resources/public/css/main.css --source-map && cp src/styles/*.less resources/public/css
wr "lessc src/styles/main.main.less resources/public/css/main.css --source-map && cp src/styles/*.less resources/public/css" src/**/*.less

当然,您也可以使用 Gulp、Webpack 等工具 - 或您习惯的任何工具。

替代方法是使用 Leiningen 插件,请参阅列表 here .

关于clojure - 自动刷新/自动重新加载资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38534319/

相关文章:

clojure - 如何在 Clojure 中保存来自 twitter-api 的流式推文?

clojure - 在datomic中,如何找出哪些键可用于反向查找?

java - 监督生成进程的输入流

reactjs - Clojurescript、Reagent : pass atoms down as inputs, 或用作全局变量?

clojure - 替代使用原子

clojure - 我如何使用 Clojure 及其 Web 框架实现类似于 Rails 的 url_for 的功能?

string - Clojure:字符字面相等

clojurescript 断点

clojure - 使用 Clojure 和 Ring 的静态文件

clojure - 在compojure中实现oauth2,如何在响应用户请求之前等待第二个oauth2回调?