Just sharing the stopgap method for "static HTML" (no server)
ClojureScript development I'm using until someone cooks up a REPL that
evals in the browser instead of Rhino.
Nothing particularly exciting here, but really beats restarting the JVM
on every compile. :-)
This will only work on Linux as is but could be trivially adapted to any
OS that has an equivalent to inotifywait. (JDK 7 will have an API for it.)
1. Install your distro's inotify-tools package.
2. Adjust the paths in the code below to suit your project.
3. Run ClojureScript's ./script/repl and paste in the code below.
4. Point your favourite editor and web browser at your project.
Now use a workflow something like this:
1. In the editor make a code change and save it.
2. Flip to browser and refresh to test it.
3. Repeat until done.
Here's the code:
(require '[cljs.closure :as cljsc])
(defn await-change [path]
(-> (Runtime/getRuntime)
(.exec (into-array ["inotifywait" "-qre" "modify" path]))
(.waitFor)))
(let [root "/home/ato/src/myproject"]
(while true
(println "Compiling...")
(time
(cljsc/build
(str root "/src/myproject/core.cljs")
{:optimizations nil ; vs :simple or :advanced
:target nil ; vs :nodejs
:pretty-print true
:output-dir (str root "/out")
:output-to (str root "/myproject.js")}))
(await-change (str root "/src"
Hints:
1. Avoid optimizations :simple or :advanced when you can while
developing. On my PC after the JVM warms up a basic compile takes 30ms
while :simple or :advanced take at least 1 second.
2. If there's a compile error you might not notice it. Position your
terminal somewhere you can easily see from both editor and browser.
3. I highly recommend global hot-keying your browser, editor and
terminal somehow. You could use virtual desktops. Me, I use the same
three tools for all my work so I just have Super-w, Super-e and Super-d
focus each respectively.
4. The same method works well for any compiled language that lacks an
interactive dev environment. When I'm working on C code I just run
this in a terminal:
while inotifywait -qre modify src; make && ./myprogram; done
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en