2016-07-22 66 views
2

Ich bin neu in Clojure und ich habe eine harte Zeit herausfinden, wie neu laden/aktualisieren Sie den Browser, wenn Änderungen an HTML/Js/CSS etc.Auto-Refresh/Auto-Reload-Assets

vorgenommen wurden

dies ist meine aktuelle Setup 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 
       } 
      } 
      } 
    } 
) 

Das ist mein 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"]}) 
      )) 

Wie ca n dies erreicht werden?

Ich bin es gewohnt, in Node zu entwickeln und Sie haben Tools wie Browser Sync, Weinre und Supervisor. Was sind die Entsprechungen in clojure?

Antwort

3

Ich schlage vor, Sie haben einen Blick auf figwheel, mit dem Sie hot Nachladen Ihres ClojureScript und CSS im Browser tun können.

Es gibt natürlich keine gute Möglichkeit, Ihren Build einzurichten, aber mein Weg für Sprachen wie SASS usw. ist es, sie als separaten Prozess anzusehen und zu kompilieren, und Figwheel das generierte CSS beobachten zu lassen.

Zum Beispiel auf einer meiner ClojureScript Projekte hatte ich eine Skriptdatei für LESS Kompilation, die den LESS-Compiler und die wr Dienstprogramm direkt verwendet:

#!/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 

Natürlich können Sie auch Dinge wie Gulp verwenden können, Webpack - oder jedes Werkzeug, das Sie gewohnt sind.

Alternativ können Sie Leiningen-Plugins verwenden, siehe Liste here.