Hi Laurent, The boot-cljs-example has started to move ahead of the blog post, and includes an optional 'serve' task.
There was a bug in the boot-cljs task that was deleting index.html erroneously; I pushed a new version and updated boot-cljs-example. If you `boot -u` to update boot (which was also updated today) and fetch latest from boot-cljs-example, there's a decent chance it will actually work :-) Alan On Wednesday, November 5, 2014 5:07:04 PM UTC-5, Laurent PETIT wrote: > > Alternatively, if I follow instructions from > https://github.com/adzerk/boot-cljs-example , > > then there's no mention of target/index.html, so I directly jump to > http://localhost:3000/ but I get an HTTP 404, so same problem there I > think. > > command is different than from the blog post: > > $ boot serve -d target/ watch speak cljs-repl cljs -usO none reload > Retrieving ring-jetty-adapter-1.3.1.jar from http://clojars.org/repo/ > Retrieving ring-core-1.3.1.jar from http://clojars.org/repo/ > Retrieving clj-time-0.6.0.jar from http://clojars.org/repo/ > Retrieving crypto-random-1.2.0.jar from http://clojars.org/repo/ > Retrieving crypto-equality-1.0.0.jar from http://clojars.org/repo/ > Retrieving ring-servlet-1.3.1.jar from http://clojars.org/repo/ > Retrieving compojure-1.2.1.jar from http://clojars.org/repo/ > Retrieving clout-2.0.0.jar from http://clojars.org/repo/ > Retrieving instaparse-1.3.4.jar from http://clojars.org/repo/ > Retrieving medley-0.5.3.jar from http://clojars.org/repo/ > Retrieving ring-codec-1.0.0.jar from http://clojars.org/repo/ > Retrieving tools.reader-0.8.1.jar from http://repo1.maven.org/maven2/ > Retrieving commons-fileupload-1.3.jar from http://repo1.maven.org/maven2/ > Retrieving jetty-server-7.6.13.v20130916.jar from > http://repo1.maven.org/maven2/ > Retrieving javax.servlet-2.5.0.v201103041518.jar from > http://repo1.maven.org/maven2/ > Retrieving joda-time-2.2.jar from http://repo1.maven.org/maven2/ > Retrieving jetty-continuation-7.6.13.v20130916.jar from > http://repo1.maven.org/maven2/ > Retrieving jetty-http-7.6.13.v20130916.jar from > http://repo1.maven.org/maven2/ > Retrieving jetty-io-7.6.13.v20130916.jar from > http://repo1.maven.org/maven2/ > Retrieving jetty-util-7.6.13.v20130916.jar from > http://repo1.maven.org/maven2/ > Retrieving tools.macro-0.1.5.jar from http://repo1.maven.org/maven2/ > Retrieving commons-codec-1.6.jar from http://repo1.maven.org/maven2/ > << started reload server on ws://localhost:8090 >> > 2014-11-05 22:59:51.865:INFO:oejs.Server:jetty-7.6.13.v20130916 > 2014-11-05 22:59:51.928:INFO:oejs.AbstractConnector:Started > SelectChannelConnector@0.0.0.0:3000 > << started web server on http://localhost:3000 (serving: target/) >> > Starting file watcher (CTRL-C to quit)... > > nREPL server listening: 0.0.0.0:50475 > Compiling main.js... > Adding <script> tags to html... > Elapsed time: 21,374 sec > > > 2014-11-05 22:42 GMT+01:00 Laurent PETIT <laurent.pe...@gmail.com>: > >> Thanks Micha for the detailed explanation ! >> >> I started following the cljs example, but am stuck right after having >> launched the first boot command: I don't see file target/index.html >> >> The command and output look like this (launched from the >> boot-cljs-example folder): >> >> $ boot watch speak cljs-repl cljs -usO none reload >> Retrieving tagsoup-1.2.1.jar from http://clojars.org/repo/ >> Retrieving enlive-1.1.5.jar from http://clojars.org/repo/ >> Retrieving jsoup-1.7.2.jar from http://repo1.maven.org/maven2/ >> Retrieving args4j-2.0.16.jar from http://repo1.maven.org/maven2/ >> Retrieving protobuf-java-2.4.1.jar from http://repo1.maven.org/maven2/ >> Retrieving clojurescript-0.0-2080.jar from http://repo1.maven.org/maven2/ >> Retrieving closure-compiler-v20130603.jar from >> http://repo1.maven.org/maven2/ >> Retrieving google-closure-library-0.0-20130212-95c19e7f0f5f.jar from >> http://repo1.maven.org/maven2/ >> Retrieving >> google-closure-library-third-party-0.0-20130212-95c19e7f0f5f.jar from >> http://repo1.maven.org/maven2/ >> Retrieving tools.reader-0.8.0.jar from http://repo1.maven.org/maven2/ >> << started reload server on ws://localhost:8090 >> >> Starting file watcher (CTRL-C to quit)... >> >> nREPL server listening: 0.0.0.0:50352 >> Compiling main.js... >> Adding <script> tags to html... >> Elapsed time: 21,489 sec >> >> >> >> 2014-11-05 1:59 GMT+01:00 Micha Niskin <micha.nis...@gmail.com>: >> >>> Hi, sorry for the late reply! Boot pretty much takes care of that part >>> for you, as long as you follow a few basic rules (I will be adding a “how >>> to be a good citizen of the boot-o-sphere” section to the wiki on github >>> soon): >>> >>> 1. >>> >>> Tasks don’t fish around in the filesystem directly to find things to >>> compile or otherwise operate on. Instead, tasks use functions in >>> boot.core that return immutable sets of java.io.File objects from >>> boot-managed temp directories. These functions present a sort of overlay >>> filesystem with files in anonymous temporary directories. This allows >>> tasks >>> to be completely decoupled from the filesystem layout. Additionally, >>> this >>> makes it possible for boot to shuffle files around and use hardlinks and >>> such to craft the classpath and the build fileset in different ways >>> during >>> the build cycle. In this way boot can emulate immutability and lexical >>> and >>> dynamic scope for things on the filesystem. >>> 2. >>> >>> Tasks don’t create files in the filesystem directly. Instead, tasks >>> use functions in boot.core that create various flavors of anonymous, >>> boot-managed temp directories (the ones mentioned in item 1, in fact). >>> An >>> important concept in boot is that the output of any task is part of the >>> input for the next task in the pipeline. This is the property that >>> supports >>> the amazing composition of tasks that is possible with boot, without >>> needing to generate miles of boilerplate configuration. >>> 3. >>> >>> The boot-managed temp directory lifespan is one build session only. >>> This means one JVM, basically. The temp directories are stored in the >>> .boot directory in the project root. The next time you run boot it >>> cleans out any old temp dirs in there (they are not cleaned up on exit >>> because you may want to look in them if something goes wrong with the >>> build; stack traces could be referencing source files in these temp >>> dirs). >>> 4. >>> >>> The only directories that boot knows about that are not temp dirs it >>> created are the ones you specify in the build.boot file via set-env! >>> (i.e. the :src-paths, :rsc-paths, and :tgt-path keys). The source >>> and resource paths are not molested by boot in any way (no files in >>> there >>> are ever deleted, moved, modified etc.). The target directory, on the >>> other >>> hand, is completely owned by boot—boot will overwrite files or delete >>> them >>> in there as it sees fit. Boot ensures that the target directory always >>> contains only those files the build process emits for that specific run, >>> and doesn’t allow any stale files to hang out in there. >>> >>> What this all means is that there is something of a tradeoff: boot never >>> persists files that could become stale, so there is no need for a clean >>> task, but on the other hand some things then need to be rebuilt instead of >>> just hanging out in the target dir. We think this is an okay tradeoff >>> because boot’s composition capabilities make it really easy to >>> incrementally run any build process at all using the built-in watch >>> task. In return you get 100% deterministic builds. >>> >>> We’ll be talking about the details of the whole temporary filesystem >>> machinery soon. Have fun playing with boot! >>> >>> >>> -- >>> Micha Niskin >>> >>> On Mon, Nov 3, 2014 at 5:45 PM, Laurent PETIT <laurent.pe...@gmail.com> >>> wrote: >>> >>>> And more seriously, I remember reading that you put an emphasis on >>>> removing the need to use a clean task. >>>> If I'm right, then I'd be interested in knowing how one is encouraged / >>>> helped to pursue this good property in its own tasks ? >>>> >>>> Le lundi 3 novembre 2014, Laurent PETIT <laurent.pe...@gmail.com> a >>>> écrit : >>>> >>>> Tongue in cheek question: if Leiningen were the maven of clojure, would >>>>> you say boot2 is gradle ? :-) >>>>> >>>>> Le lundi 3 novembre 2014, Micha Niskin <micha.nis...@gmail.com> a >>>>> écrit : >>>>> >>>>>> Hi! >>>>>> >>>>>> Boot (http://github.com/boot-clj/boot) is a build tool for Clojure. >>>>>> We've pulled together lessons learned from a year or so using boot v1 in >>>>>> production and are now getting ready to release v2. To show what boot >>>>>> can >>>>>> do we present a very streamlined and awesome boot-based ClojureScript >>>>>> development workflow ( >>>>>> http://adzerk.com/blog/2014/11/clojurescript-builds-rebooted/). >>>>>> >>>>>> Try it out, maybe you'll like it! We're hoping to get some feedback >>>>>> before committing to a stable release, so please if you have any >>>>>> comments >>>>>> or questions we'd be happy to hear them. Have fun! >>>>>> >>>>>> -- >>>>>> 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 >>>>>> --- >>>>>> You received this message because you are subscribed to the Google >>>>>> Groups "Clojure" group. >>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>> send an email to clojure+unsubscr...@googlegroups.com. >>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>> >>>>> >>>>> >>>>> -- >>>>> Laurent Petit >>>>> >>>>> >>>> >>>> -- >>>> Laurent Petit >>>> >>>> -- >>>> 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 >>>> --- >>>> You received this message because you are subscribed to a topic in the >>>> Google Groups "Clojure" group. >>>> To unsubscribe from this topic, visit >>>> https://groups.google.com/d/topic/clojure/YAckwMSfZkY/unsubscribe. >>>> To unsubscribe from this group and all its topics, send an email to >>>> clojure+unsubscr...@googlegroups.com. >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> >>> -- >>> 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 >>> --- >>> You received this message because you are subscribed to the Google >>> Groups "Clojure" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to clojure+unsubscr...@googlegroups.com. >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> >> >> -- >> Laurent Petit >> > > > > -- > Laurent Petit > -- 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 --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.