I'm way too biased towards the Closure Compiler and giving that up is simply 
not an option for me. I am however very interested in making things simpler for 
everyone.

https://github.com/thheller/shadow-devtools/wiki/ClojureScript-for-node.js-libraries

This is an example of how I intend to do that for node libraries, ie. something 
you just require. This actually bundles things up in a UMD format so the same 
can work for non-node environments. I would happily add a :browser-umd target 
that solves some of the issues for webpack users.

https://github.com/thheller/shadow-devtools/wiki/ClojureScript-for-the-browser

I have used the underlying shadow-build for over 3 years now to do 
code-splitting with permanent caching of generated files (ie. each generated 
file has a unique name). I also recently added the :module-loader which lets 
you async load modules on demand.

Not sure what asset bundling does so no comment on that.

I can't do anything about the JVM. I have been using it for too long so I may 
be blind to the issues people are having with it. It isn't that bad?

I would say there is actually a good solution to the issues you mention. They 
just aren't available in the "mainstream" tools and I suck at writing 
documentation. I'm happy to provide examples any time but need help with the 
writing.

Coming back to the webpack loader: I have a few ideas how I would write such a 
thing. The issue I see, and why I don't, is that the end result is bad. CLJS is 
built very much with the GCL in mind. cljs/core.js is 1.2MB (151KB gzip) 
unoptimized. One large file is very non-idiomatic npm/webpack. That also does 
not contain any user code. UglifyJS is able to shorten some of the code but you 
still keep about 84K gzip'd. To me that is unacceptable.

Web-targeted JS needs to be optimized as much as possible and currently that 
means using the GCL. I don't want to create a "simple" solution that sacrifices 
this just to make dev-time easier.

I have been CLJS first for too long now to imagine which issues people are 
having who are webpack first. Happy to discuss ideas or proposals. Maybe there 
are ways (like the :node-library, :node-script) that could work even in 
:advanced mode.



On Friday, May 12, 2017 at 5:57:58 AM UTC+2, Jiyin Yiyong wrote:
> It would be nice if we can require ClojureScript in JavaScript, and let 
> Webpack to handle so many issues.
> 
> 
> For Webpack use cases, I tried to sell ClojureScript to other front-end 
> developers around me, but saw some problems:
> 
> 
> * IMPORTANT: hard to install JVM. For JavaScript projects, installing 
> Node.js(with npm inside) would be okay. It's very hard for JavaScript 
> developers to pick up JVM and Boot(or Leiningen).
> * IMPORTANT: long time caching and code splitting. We use these features in 
> production for years. But I don't see a good solution in ClojureScript.
> * Async code loading. For large projects some code can be loaded when a 
> router is activated. No good solution found in ClojureScript.
> * Assets bundling. Now we rely on Webpack to do that, result in using 2 tools.
> 
> 
> Not sure if they can be solved if we have a ClojureScript running on Webpack. 
> But there are many compiled-to-js languages support those features in by 
> supporting Webpack already. That's the purpose behind the post.
> 
> 
> Didn't try `node-jre`. I'm guessing we still need to debug JVM stuffs since 
> it's running JVM?
> 
> 
> On Fri, May 12, 2017 at 6:11 AM Shaun LeBron <shaunew...@gmail.com> wrote:
> On Wednesday, May 10, 2017 at 11:45:02 PM UTC-5, Jiyin Yiyong wrote:
> 
> > Already an old boring topic... I'm from JavaScript side and so many people 
> > are building apps with Webpack. And so many of alt-js languages got Webpack 
> > loaders:
> 
> >
> 
> > BuckleScript https://github.com/rrdelaney/bs-loader
> 
> > PureScript https://github.com/ethul/purs-loader
> 
> > Elm https://github.com/elm-community/elm-webpack-loader
> 
> > Fable https://github.com/fable-compiler/Fable
> 
> >
> 
> > Exception:
> 
> >
> 
> > No Webpack for ReasonML 
> > https://github.com/chenglou/reason-react-example/blob/master/webpack.config.js
> 
> >
> 
> > Can we make a loader for ClojureScript?
> 
> >
> 
> > Or how about the possibility? I guess Closure Compiler will get in the why. 
> > But is it possible if I don't use dead code elimination from Closure 
> > Compiler? I know many people need it but seriously no other solutions? And 
> > how much does ClojureScript depend on Closure Library?
> 
> 
> 
> I'm from the JS side as well, so I'm glad to see this question!  Are you 
> imagining something like the following?  We should probably start by 
> imagining why someone would want to require cljs this way and if it would 
> even make sense to:
> 
> 
> 
> ```
> 
> require('cljs!./src-cljs') // return all goog.provided namespaces?
> 
> require('cljs!./src-cljs/foo/core.cljs') // return a single goog.provide 
> namespace?
> 
> ```
> 
> 
> 
> Either way I think it would need Closure Compiler to return a single asset 
> for each require statement, if I understand webpack correctly.
> 
> 
> 
> It's worth mentioning that the recent "node-jre" package allows users to 
> install/use the full cljs JVM compiler in its fully glory through npm without 
> any external dependencies, which I've tested here: 
> https://github.com/cljs/tool
> 
> 
> 
> I think it's possible—just unsure of webpack use-cases.  Thoughts?
> 
> 
> 
> --
> 
> Note that posts from new members are moderated - please be patient with your 
> first post.
> 
> ---
> 
> You received this message because you are subscribed to a topic in the Google 
> Groups "ClojureScript" group.
> 
> To unsubscribe from this topic, visit 
> https://groups.google.com/d/topic/clojurescript/HNuYCfPRtQw/unsubscribe.
> 
> To unsubscribe from this group and all its topics, send an email to 
> clojurescrip...@googlegroups.com.
> 
> To post to this group, send email to clojur...@googlegroups.com.
> 
> Visit this group at https://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 https://groups.google.com/group/clojurescript.

Reply via email to