Some typo. Since the package name in my previous post is demo, it is actually written like `require('demo/main.js')`, which means the structure of the folder should be(no `target/demo/`):
``` . ├── assets │ └── package.json ├── project.clj ├── src │ └── demo │ └── main.cljs └── target ├── main.js └── package.json ``` On Wed, May 17, 2017 at 1:54 AM jiyinyiyong <jiyinyiy...@gmail.com> wrote: > Fascinating.. it's using `node_modules/shadow-cljs` to do the trick. I can > see ClojureScript files are compiled into CommonJS compatible form... > > Do you think it's possible that we put all js built from `cjs.core`(also > with `goog`) into a single npm package. And then for each ClojureScript > file, it is mapped to a JavaScript file by `shadow-cljs` tools, which use > `require("./cljs.core.js");` to access it's cljs dependencies(like in your > demo), and use `require('package_name/foo/bar')` to require sibling files. > For other packages, maybe we can do the some trick, like precompile them > with `shadow-cljs` tools and then release them to npm. Seeing from a > CoffeeScript user, I think somehow in this way ClojureScript can also fit > into npm's ecosystem. > > Here's an example, we may create a new project in such file structure, > where: > > `src/` is for source code, > `target` is for compiled code, > `package.json` is copied from `assets/package.json` to > `target/package.json`, > > ``` > . > ├── assets > │ └── package.json > ├── project.clj > ├── src > │ └── demo > │ └── main.cljs > └── target > ├── demo > │ └── main.js > └── package.json > ``` > > if it's in this way, `target/` can be released on npm as a module and > others surely may use `require('package_name/demo/main.js')` to load the > package built from ClojureScript. > > > > On Wed, May 17, 2017 at 12:15 AM Thomas Heller <th.hel...@gmail.com> > wrote: > >> >> > 1. Should we call this "cljs-require"? With the understanding that it >> is a bit like a portal to cljs's ":require" form: >> > >> > require('cljs-require/foo.core') >> >> The package name must be something you add to your package.json, >> otherwise yarn will nuke the directory every time you run "yarn install". >> "npm" isn't as strict but still. Using the name of the tool seemed like the >> obvious choice. We can however create an empty cljs-require npm package >> that just serves as a placeholder. >> >> I'm totally for this if other tools want to adopt this idiom. I >> definitely do not want this to be something you can only do with >> shadow-cljs. >> >> >> > 2. Is there a way to set the ClojureScript version, or is it tied to >> shadow's version? >> >> You can specify dependencies in package.json, basically like you would in >> lein. >> >> "shadow-cljs: { >> "version":"1.0.20170516", >> "dependencies": [ >> ["org.clojure/clojurescript", "1.9.542"] >> ] >> } >> >> where "version" is the version of shadow-devtools, any other dependencies >> are resolved using the fantastic pomegrenate lib. (thanks btw for writing >> the dep-resolver, I didn't think it would be this simple to do the >> dependency loading). >> >> I'm not sure how the conflict resolution works but you should be able to >> use any cljs version you want. The only things written in stone are the >> deps of the shadow-cljs uberjar, can't change the clojure version after the >> fact. >> >> See: >> >> https://github.com/thheller/shadow-devtools/blob/master/npm-package/project.clj >> >> >> > >> > 3. Thinking back on Jiyin's question about using cljs in webpack—have >> you put any thought into the possibility of this workflow as a webpack >> loader? Maybe that's a next step? >> >> Don't need a loader. It could be a plugin that just calls "shadow-cljs >> --once" >> before proceeding with the rest of the JS compilation. >> >> I actually started by writing a plugin but to be honest I do not think it >> is super useful. You can achieve the same via npm scripts & co. You'll need >> the CLI tool for more advanced tasks (eg. REPL) anyways. >> >> I want this to be generally useful, not just webpack. No specific webpack >> configuration is needed, you just somehow need to compile before calling >> webpack. "webpack -w" and "shadow-cljs --dev" side-by-side actually just >> works. >> >> > Awesome job turning this webpack discussion into a real tool we can >> explore! 🎉 >> >> Thanks. >> >> One issue that needs to be addressed is the widespread use of CLJSJS >> packages in popular libs like reagent&co. Can't have cljsjs.react react.js >> if you are supposed to use npm react. >> >> I can easily skip over all foreign-libs but then (:require >> [cljsjs.react]) wouldn't have the effect of ensuring that "React" is >> available on global. Not yet sure how to best handle that yet. >> >> Still have a few ideas I want to explore, haven't totally given up on the >> Closure Compiler yet but it making life harder than it should be. >> >> -- >> 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/AGXku7Ous0Y/unsubscribe. >> To unsubscribe from this group and all its topics, 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. >> > -- 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.