首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从clojure文件重新加载

从clojure文件重新加载
EN

Stack Overflow用户
提问于 2016-07-28 04:35:43
回答 2查看 263关注 0票数 0

我是clojure的新手,我正在尝试在clojure中实时重新加载,我希望能够监控/查看所有/任何项目文件并自动更新浏览器

到目前为止,我有以下内容

代码语言:javascript
复制
(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 "1.5.0"]
                 [stasis "2.2.0"]
                 [hiccup "1.0.5"]
                 [clj-tagsoup "0.3.0"]
                 [optimus "0.18.5"]
                 [ring/ring-jetty-adapter "1.5.0"]
                 [cljs-ajax "0.5.8"]
                 [enfocus "2.1.1"]]
  :plugins [[lein-cljsbuild "1.1.3"]
            [lein-ring "0.9.7"]]
  :cljsbuild {:builds [

    {:id "dev"
    :incremental true
    :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"
                          }}]}
  :aliases {
    "start-dev" ["pdo" ["cljsbuild" "auto"] ["ring" "server-headless"]]
  }
  :source-paths ["src"]
  :resource-paths ["resources"]
  :main app2.server
  :repl-options {
                :prompt (fn [ns] (str "your command for <" ns ">, master? " ))
                :welcome (println "Welcome to the magical world of the repl!")
                :init-ns app2.hawk
                :init (app2.hawk/init)
                :caught clj-stacktrace.repl/pst+
                :skip-default-init false
                :host "0.0.0.0"
                :port 9000
                :timeout 40000
              }
  :ring {
    :init app2.hawk/init
    :handler app2.server/app
    :auto-reload? true :auto-refresh? true :reload-paths ["resources/public"]
    :refresh-paths ["resrouces/public"]
  }
  :profiles {
    :dev {
          :repl-options {
            :nrepl-middleware [cemerick.piggieback/wrap-cljs-repl]
          }
          :source-paths ["src"]
            :ring {
              :nrepl {
                :start? true
                :port 9000
                :host "0.0.0.0"
              }
            }
            :dependencies [
              [ring-refresh "0.1.1"]
              [http-kit "2.0.0"]
              [org.clojure/tools.nrepl "0.2.11"]
              [com.cemerick/piggieback "0.2.1"]
              [hawk "0.2.10"]
            ]
            :plugins [
              [lein-pdo "0.1.1"]
            ]
          }
        }

)

对于我的管理员,我有

代码语言:javascript
复制
(ns app2.server
  (:use [ring.middleware.resource :only [wrap-resource]]
        [ring.middleware.file-info :only [wrap-file-info]]
        [ring.middleware.file :only [wrap-file]]
        [ring.middleware.reload :refer [wrap-reload]]
        [ring.middleware.content-type :refer [wrap-content-type]]
        [ring.middleware.refresh :refer [wrap-refresh]]
        [ring.util.response :refer [file-response]]
       )

(defn wrap-utf-8
  "This function works around the fact that Ring simply chooses the default JVM
  encoding for the response encoding. This is not desirable, we always want to
  send UTF-8."
  [handler]
  (fn [request]
    (when-let [response (handler request)]
      (if (.contains (get-in response [:headers "Content-Type"]) ";")
        response
        (if (string? (:body response))
          (update-in response [:headers "Content-Type"] #(str % "; charset=utf-8"))
          response)))))


(defn handler [request]
            (file-response (:uri request) {:root "resources/public"}))

(def app (-> handler
             wrap-content-type
             wrap-reload
             wrap-refresh []
             wrap-utf-8))

然后我从瑞普尔跑出了霍克

代码语言:javascript
复制
(ns app2.hawk
(:require [hawk.core :as hawk])
(:require [app2.server :refer [export-pages]]))

(defn init
  []
  (export-pages)
  (hawk/watch! [{:paths ["src/app2/templates" "resources/templates"]
               :filter hawk/modified?
               :handler (fn [ctx e]
                          (export-pages) ;; i'm compiling html pages dynamically to the server root but how do I then notify browser than html has changed? can i force server to reload from here?
                          ctx)}]))
EN

回答 2

Stack Overflow用户

发布于 2016-07-28 09:29:23

如果您不介意使用Boot而不是Leiningen,system项目将提供您可以从Lisp中期待的所有重新加载的好处,并提供了大量的示例。

一定要检查Holy Grail demo,它利用了系统,以最大限度地减少麻烦。

票数 2
EN

Stack Overflow用户

发布于 2016-07-28 08:52:22

到目前为止,听起来你已经做了一个很棒的设置。为了管理这个工作流,Figwheel是合乎逻辑的下一步。如果你正在做任何Clojurescript + clojure-web的东西,你几乎可以肯定应该从figwheel开始,你会有一个更愉快的体验。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38622722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档