从clojure文件重新加载
我是clojure的新手,我正在尝试在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
(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)}]))