Re: Minimalist autocompile workflow for ClojureScript

2011-08-01 Thread Tunde Ashafa
I have this working on emacs. On my slicehost VM it works flawlessly, but at 
my work VM, only the first compilation works. Subsequent calls (on change 
notification) produces an empty JS file. Just wondering if you or anyone 
else has come across this issue.

Thanks, Tunde.

-- 
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

Minimalist autocompile workflow for ClojureScript

2011-07-27 Thread Alex Osborne
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