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 <[email protected]> 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 <[email protected]>
> 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
>> [email protected].
>> To post to this group, send email to [email protected].
>> 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 [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/clojurescript.