Thanks Gary. Yeah, moving :cljsbuild to the :dev profile works. I still
have to manually run cljsbuild though, which is annoying on my local
machine and I suspect it would break things like deploying to Heroku or
Cloud Foundry. So this will do for now but I'm still looking for a better
solution in the long run.



On 9 June 2014 11:30, Gary Trakhman <gary.trakh...@gmail.com> wrote:

> I don't think leiningen will ever do this, it might be a cleaner hack if
> you move the cljsbuild plugin into the dev profile too.
>
>
> On Monday, June 9, 2014, Chris Jenkins <cdpjenk...@gmail.com> wrote:
>
>> Actually, putting Clojurescript and any Clojurescript libraries into :dev
>> dependencies doesn't quite work in a trouble-free way because it still
>> breaks the Clojurescript compilation step in some circumstances. If I do
>> the following:
>>
>> lein clean
>> lein uberjar (or lein ring uberwar)
>>
>> .. then the following error is seen:
>>
>> Compiling "resources/public/js/script.js" failed.
>> clojure.lang.ExceptionInfo: Could not locate hiccups/core__init.class or
>> hiccups/core.clj on classpath:  at line 1  {:tag :cljs/analysis-error,
>> :file nil, :line 1, :column 1}
>> at clojure.core$ex_info.invoke(core.clj:4327)
>>  <snip>
>>
>> I guess lein cljsbuild is trying to build the .cljs source into .js
>> (because lein clean has removed all the generated .js files) but it can't
>> see any Clojurescript dependencies because the :dev profile isn't active.
>>
>> I can run
>>
>> lein with-profile dev uberjar
>>
>> ... which allows lein cljsbuild to see the Clojurescript dependencies,
>> but then puts Clojurescript and all its dependencies into the resulting
>> uberjar (which is what I was trying to avoid).
>>
>> The best way I've found to work round this is always to run lein
>> cljsbuild once before running lein uberjar. That gives me an uberjar that
>> does not contain the Clojurescript compiler (nor its dependencies) but it
>> seems like a bit of a hack to have to do this. Indeed, as far as I
>> understand it, using the :dev profile in the manner that I am doing seems
>> like a bit of a hack.
>>
>> In the long term, a solution might be for Leiningen to differentiate
>> between Clojurescript and Clojure dependencies and to treat them
>> differently. Does that sound like it might be sensible?
>>
>>
>>
>> On 9 June 2014 00:31, Chris Jenkins <cdpjenk...@gmail.com> wrote:
>>
>> Thanks Gary. That fixed it once I realised that another library,
>> cljs-ajax, was also pulling in clojurescript. After moving clojurescript,
>> hiccups and cljs-alax into the :dev dependencies, I can now run the app or
>> create an uberjar or uberwar and it doesn't pull in Clojurescript's
>> dependencies.
>>
>>
>>
>> On 9 June 2014 00:00, Gary Trakhman <gary.trakh...@gmail.com> wrote:
>>
>> Well, like I mentioned, you can wrap dev-specific dependencies into a
>> :dev profile.
>>
>> :profiles {:dev {:dependencies {[[org.clojure/clojurescript "Blah"]
>>                                  [hiccups "hiccups-version"]}}}
>>
>> they will get merged in when the dev profile is active, but won't end up
>> in artifacts.  You could put your :cljsbuild settings in there too, but
>> there's no harm in leaving it top-level.
>>
>> https://github.com/technomancy/leiningen/blob/master/doc/PROFILES.md
>>
>>
>> On Sun, Jun 8, 2014 at 6:52 PM, Chris Jenkins <cdpjenk...@gmail.com>
>> wrote:
>>
>> If I remove clojurescript from my :dependencies in project.clj, two
>> things happen:
>>
>> 1) When I run lein cljsbuild, it complains and says:
>>
>> "WARNING: It appears your project does not contain a ClojureScript
>> dependency. One will be provided for you by lein-cljsbuild ...<snip>" -
>> lein-cljsbuild seems to be saying that I *do* need to specify a dependency
>> on Clojurescript. Is this correct?
>>
>> 2)  My app depends on hiccups 0.3.0, which in turn pulls in clojurescript
>> 0.0-2069 This is slightly earlier than the level that I just removed from
>> my dependencies... but I still don't really want that dependency to be
>> there. Is hiccups doing the wrong thing here?
>>
>> So I still have the same question really: Whether I'm writing an app or a
>> library, how can I depend upon Clojurescript in such a way that I can run
>> lein cljsbuild at dev time and generate some .js files, and such that, at
>> run time, my server-side Clojure code can then forget that Clojurescript
>> even exists (and certainly not depend upon the Clojurescript compiler)?
>>
>>
>>
>> On 8 June 2014 23:40, Gary Trakhman <gary.trakh...@gmail.com> wrote:
>>
>> Clojurescript libs shouldn't specify a Clojurescript dependency (I think).
>>
>> You can perhaps separate the clojurescript part of your app into a
>> separate project or lein profile.
>>
>> There are other issues that can come about by mixing and matching JVM +
>> CLJS deps, one nasty one I hit is a tools.reader incompatibility. CLJS
>> itself is sensitive to tools.reader versions, and it took an hour or so to
>> debug.
>>
>>
>> On Sun, Jun 8, 2014 at 5:58 PM, Chris Jenkins <cdpjenk...@gmail.com>
>> wrote:
>>
>> Hi,
>>
>> I notice that if my project.clj specifies a dependency on Clojurescript
>> (or on a Clojurescript library which in turn pulls in Clojurescript), this
>> causes my project to have a dependency on the Google Closure compiler and
>> all of its dependencies. If I understand this correctly, it means that
>> stuff like Guava and FindBugs is on the classpath of my application at
>> runtime and those libraries are
>>
>>  --
> Note that posts from new members are moderated - please be patient with
> your first post.
> ---
> You received this message because you are subscribed to the Google Groups
> "ClojureScript" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojurescript+unsubscr...@googlegroups.com.
> To post to this group, send email to clojurescript@googlegroups.com.
> Visit this group at http://groups.google.com/group/clojurescript.
>

-- 
Note that posts from new members are moderated - please be patient with your 
first post.
--- 
You received this message because you are subscribed to the Google Groups 
"ClojureScript" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojurescript+unsubscr...@googlegroups.com.
To post to this group, send email to clojurescript@googlegroups.com.
Visit this group at http://groups.google.com/group/clojurescript.

Reply via email to