从clojure文件重新加载

从clojure文件重新加载,clojure,read-eval-print-loop,ring,Clojure,Read Eval Print Loop,Ring,我是clojure的新手,我正在尝试在clojure中进行实时重新加载。我希望能够监视/查看所有/任何项目文件并自动更新浏览器 到目前为止,我有以下几点 (defproject app2 "0.1.0-SNAPSHOT" :description "FIXME: write this!" :url "http://exampl.com/FIXME" :dependencies [[org.clojure/clojure "1.8.0"] [org.c

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

到目前为止,我有以下几点

(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"]
            ]
          }
        }
然后我在repl公司运行hawk

(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)}]))

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

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

如果你不介意使用Boot而不是Leiningen,这个项目将为你提供Lisp所能提供的所有重新加载的好处,并提供大量的例子


请务必检查利用系统的,以便以最小的麻烦开始。

如果您不介意使用Boot而不是Leiningen,该项目将为您提供Lisp所能提供的所有重新加载优点,并提供大量示例



请务必检查利用系统的,以便以最小的麻烦开始。

对于常规clojure工作流,
lein测试刷新
非常有用:对于ClojureScript,请务必查看
figwheel
:那么无花果轮是唯一的解决方案?现在真的不需要任何“测试”。在我进入重型框架之前,我真的只是想学习一些基础知识。CLJS有很多工具、库和框架。您可能喜欢,也可能喜欢。对于常规clojure工作流,
lein test refresh
非常有用:对于ClojureScript,请务必查看
figwheel
:那么fig wheel是唯一的解决方案?现在真的不需要任何“测试”。在我进入重型框架之前,我真的只是想学习一些基础知识。CLJS有很多工具、库和框架。你可能喜欢,也可能喜欢。Maaannn我已经试过两次fig wheel了,我对它很不舒服…看不到大多数项目文件。无法按我想要的方式自定义repl。仍然缺乏一些特点,在我看来应该是标准的。来自nodejs的背景,它不符合标准。但我会再试一试。问题是你需要
lein figwheel
才能使用figwheel吗?或者你能使用它的api并将其“挂钩”到你现有的逻辑中吗?不得不承认文档是相当模糊和突然的。对于Noobsmaannn,我已经试过两次fig wheel,我对它感到非常不舒服…无法观看大多数项目文件。无法按我想要的方式自定义repl。仍然缺乏一些特点,在我看来应该是标准的。来自nodejs的背景,它不符合标准。但我会再试一试。问题是你需要
lein figwheel
才能使用figwheel吗?或者你能使用它的api并将其“挂钩”到你现有的逻辑中吗?不得不承认文档是相当模糊和突然的。Had for noobsI在0.3.0发布之前尝试了system 0.3.0-SNAPSHOT,将引导任务(如
(system:auto-true)
)作为一种“刷新”任务插入到我的任务管道中似乎效果很好。不过,我不想依赖快照版本,所以我将其搁置了一段时间。当我在0.3.0发布后回到它时,我不再能够让
系统
任务作为简单的代码重新加载程序工作,这就是我发布该库的原因。系统的重新加载功能只是为了使组件更加专业化吗?很好,您为
工具编写了一个包装器!是的,
系统
的设计目的是在重新加载代码的同时提供重新启动,这是通过利用组件实现的。是的,我理解这一点。我想知道的是:在我看来,虽然
system
应该与组件一起使用,但它也应该作为一项任务来简单地重新加载没有组件的代码;是这样的,还是使用
system
重新加载没有组件的代码不起作用?如果是前者,您是否可以添加一些文档,并提供一个演示如何实现这一点的小演示?我这样问是因为我担心我没有正确地使用
系统
,而且
引导刷新
实际上不能满足
系统
尚未满足的任何目的。您正确地使用了
系统
,您提出了一个我没有预料到的用例,您通过
引导刷新任务很好地解决了这个用例。然而,我意识到在
系统中容纳您的用例是微不足道的,也是可取的,因此最新的快照版本将满足您的需要。您将在此处找到一个演示:。非常感谢。好的,谢谢!很高兴知道我没有遗漏任何东西。感谢您添加该功能和演示;有……当然是有用的。)在0.3.0发布之前,我尝试了system 0.3.0-SNAPSHOT,将引导任务(如
(system:auto-true)
)作为一种“刷新”任务插入到我的任务管道中似乎效果很好。不过,我不想依赖快照版本,所以我将其搁置了一段时间。当我在0.3.0发布后回到它时,我不再能够让
系统
任务作为简单的代码重新加载程序工作,这就是我发布该库的原因。系统的重新加载功能只是为了使组件更加专业化吗?很好,您为
工具编写了一个包装器!是的,
系统
的设计目的是在重新加载代码的同时提供重新启动,这是通过利用组件实现的。是的,我理解这一点。我想知道的是:在我看来,虽然
system
应该与组件一起使用,但它也应该作为一项任务来简单地重新加载没有组件的代码;
(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)}]))