cljs-dev

ClojureScript compiler & std lib dev, https://clojurescript.org/community/dev
dnolen 2020-04-13T00:24:04.415300Z

ha @mfikes fast initial prompt is actually pretty nice enabled on browser REPL

dnolen 2020-04-13T00:24:14.415600Z

it was never that slow - but this makes it feel much faster

juhoteperi 2020-04-13T07:38:12.417200Z

Oh, works now. I tested different command and left that in the configuration, with proper npx command I see the output file. I think it would be good idea to print out the webpack output?

juhoteperi 2020-04-13T08:01:54.418600Z

Though for watch mode it definitely makes sense to not show the webpack stdout. Anyway, I can just run the command myself if I want to see the output, and probably makes more sense here anyway, as I might want to pass the bundle to webpack directly or to Karma.

dominicm 2020-04-13T08:47:11.419300Z

RE: not showing the webpack output, I think I've made a mistake in my webpack config and it's taken me a good 15m or so to realize that's why cljs is silently not producing output.

juhoteperi 2020-04-13T08:48:13.419800Z

If the command fails, the exception should contain the stdout contents.

dominicm 2020-04-13T08:48:34.420500Z

Didn't fail, I think I didn't have webpack installed (I guess I wiped my node_modules). And it was prompting for input.

dominicm 2020-04-13T08:48:48.421Z

I guess when needing to prompt for input in non-interactive env it exits with 0?

juhoteperi 2020-04-13T08:48:49.421100Z

Yeah. And I think it won't show stderr contents.

juhoteperi 2020-04-13T08:49:11.421600Z

The implementation closes stdin, so it should exit?

dominicm 2020-04-13T08:49:31.422100Z

ah, then in that case I guess npx read it as "N", and exited.

dominicm 2020-04-13T08:51:30.422700Z

Something (possibly) useful is that you don't need a http://webpack.co

dominicm 2020-04-13T09:20:57.424400Z

Interestingly, while the bundle output is smaller for react/react-dom, shadow still produces slightly smaller output. (1KiB difference).

juhoteperi 2020-04-13T09:22:07.425400Z

Should ^:export work in advanced optimized bundle, so that the exported fn can be accessed from the JS side? Looks like goog.global is not the same as window and looks like it is not seen outside of Cljs module.

dominicm 2020-04-13T09:23:47.425500Z

For a simple prn, running through webpack seems to save some bytes:

prn/Cljs 1.10.520-fn-invoke-direct.js                           90KiB   21KiB   18KiB
prn/Cljs 1.10.520.js                                            92KiB   21KiB   18KiB
prn/Cljs 1.10.597-fn-invoke-direct.js                           93KiB   21KiB   18KiB
prn/Cljs 1.10.597.js                                            94KiB   21KiB   18KiB
prn/Cljs c1cf559a Bundle-fn-invoke-direct.js                    90KiB   20KiB   17KiB
prn/Cljs c1cf559a Bundle.js                                     91KiB   20KiB   17KiB
prn/Shadow-Cljs-2.8.94-fn-invoke-direct.js                      90KiB   20KiB   17KiB
prn/Shadow-Cljs-2.8.94.js                                       92KiB   20KiB   17KiB

dominicm 2020-04-13T09:23:58.425700Z

(columns are raw, gzip, brotli)

juhoteperi 2020-04-13T09:27:17.425900Z

For Reagent demo site, just using Cljsjs React is 20kB smaller

dominicm 2020-04-13T09:32:01.426200Z

For very simple:

(ns io.dominic.cljs-sizes.main
  (:require
    [reagent.dom :as rd]))

(defn welcome
  [name]
  [:h1 (str "Hello, " name)])

(defonce _mount (rd/render [welcome "Fred"] (js/document.getElementById "app")))
I get slightly smaller bundle (by 8 bytes) for the webpack version.

juhoteperi 2020-04-13T09:32:43.426400Z

I didn't have elide-asserts enabled for bundle builds, sec

juhoteperi 2020-04-13T09:33:58.426600Z

466KB now, with Cljsjs 457KB

dominicm 2020-04-13T09:34:28.426800Z

Does the demo site use more than react/react-dom?

juhoteperi 2020-04-13T09:34:31.427Z

ah no, that is not cljsjs version

dominicm 2020-04-13T09:34:47.427200Z

I'm expecting bundle to win because it does not have so many duplicate dependencies as cljsjs creates.

juhoteperi 2020-04-13T09:35:20.427400Z

reagent website in fact uses React with node module processing, so React code is going through Closure optimizations

juhoteperi 2020-04-13T09:36:17.427600Z

node module processing 457KB, bundle 466KB, foreign-libs 470KB.

juhoteperi 2020-04-13T09:36:46.427800Z

Makes sense now

dominicm 2020-04-13T09:39:10.428Z

ah, interesting. Probably not many sites that can do that!

juhoteperi 2020-04-13T09:40:45.428200Z

No, React is probably one of the only libs that works and even it still requires the extern file.

juhoteperi 2020-04-13T09:41:37.428400Z

Extern file also means that it isn't properly optimized, we should have separate extern file for this, with only the dynamic names that break when optimized, but not the public API which can be optimized in this case.

juhoteperi 2020-04-13T09:51:09.429600Z

Maybe Cljs should set goog.global = window somewhere, goog.string.unescapeEntities also breaks as it doesn't find goog.global.document.

juhoteperi 2020-04-13T09:56:24.430400Z

With few inferred extern additions, I now have Reagent tests passing with advanced optimized bundle.

juhoteperi 2020-04-13T10:18:25.430500Z

without the extern file, node module processing output goes down to 453KB (but it doesn't work)

dnolen 2020-04-13T10:41:43.431900Z

@juhoteperi @dominicm re: :bundle-cmd output I really don't care that much here - it's just important to note it's a convenience

dnolen 2020-04-13T10:42:13.432700Z

as noted you can easily run the bundle cmd separately and that might be common because you want to do more things

dnolen 2020-04-13T10:42:29.433300Z

and the :bundle-cmd is intentionally simple and doesn't support parameterization

dnolen 2020-04-13T10:42:39.433700Z

not interested in that at all

dominicm 2020-04-13T10:42:47.434Z

One problem is that I don't understand how bundle relates to development mode at all

dnolen 2020-04-13T10:43:00.434200Z

I don't know what you mean?

dominicm 2020-04-13T10:45:15.435300Z

Well, I have this "worry" that it'll be run more frequently than just once. So dev would be very inconvenient otherwise.

juhoteperi 2020-04-13T10:47:06.435900Z

Bundle-cmd is run after every compile. Or I guess you could use JS tools to watch for file changes.

dominicm 2020-04-13T10:47:29.436100Z

How often is a compile run?

dominicm 2020-04-13T10:47:36.436300Z

e.g. on file change?

juhoteperi 2020-04-13T10:47:52.436700Z

In watch mode, on file change.

dominicm 2020-04-13T10:48:59.438Z

Okay. One worry I have is webpack failing mid-development session. That would be a bit of face meeting wall to realize/debug.

dnolen 2020-04-13T10:51:36.439800Z

that possible but I don't think it's much of a worry - you need the bundler when your ClojureScript requires include something from node_modules you haven't required before.

dnolen 2020-04-13T10:51:53.440200Z

also nothing is stopping anyone from using watchman and setting this up however they like

dnolen 2020-04-13T10:52:06.440700Z

:bundle-cmd is not important

dnolen 2020-04-13T10:52:53.442100Z

@juhoteperi we could change ^:export here, goog.exportSymbol takes a third parameter - I'm wondering if that's good enough

juhoteperi 2020-04-13T10:53:55.442900Z

Closure library code which presumes goog.global is the window object is also a problem, that wouldn't help with that

dnolen 2020-04-13T10:54:28.443400Z

@juhoteperi ah yeah, ok we have the hook for this in core, only used in Node.js right now

dnolen 2020-04-13T11:09:14.443600Z

@juhoteperi try master

dnolen 2020-04-13T11:09:25.443800Z

if that works for you will close 3227

thheller 2020-04-13T11:15:59.444Z

can we please not do this?

thheller 2020-04-13T11:16:07.444300Z

window does not exist in web workers

thheller 2020-04-13T11:16:22.444700Z

react-native also doesn't have window

thheller 2020-04-13T11:16:55.445Z

there are plenty of things that might want to use bundle but don't have window

juhoteperi 2020-04-13T11:18:54.445900Z

Maybe webpack has some way to handle this?

thheller 2020-04-13T11:20:06.446800Z

the "problem" is that goog.global = this breaks because this is no longer window after webpack has processed it

thheller 2020-04-13T11:20:33.447500Z

assigning goog.global in cljs.core is also too "late" given that it may have been used before loading cljs.core by closure code (eg. goog/base.js)

thheller 2020-04-13T11:22:13.448200Z

in shadow-cljs I overwrite it directly in goog/base.js before emitting that file

juhoteperi 2020-04-13T11:25:19.449100Z

Cljs should probably use similar logic to select the global object?

thheller 2020-04-13T11:25:55.449300Z

thats not actually the correct code

thheller 2020-04-13T11:26:29.450Z

that is used for :npm-module which is a rather special :target in that it exposes each CLJS ns as a separate require("shadow-cljs/cljs.core") ns

thheller 2020-04-13T11:27:08.451Z

but if you assume webpack then I guess that would work regardless

thheller 2020-04-13T11:27:32.451500Z

but I think the next version of webpack will remove the process polyfill so that would break then

juhoteperi 2020-04-13T11:33:33.451900Z

@dnolen Export & unescapeEntities works now (but I had other problems with Karma)

juhoteperi 2020-04-13T11:36:52.452400Z

maybe instead of checking for process.browser the global object could be just window || self || global ?

dnolen 2020-04-13T11:38:07.452800Z

@juhoteperi I don't really know what you're trying to suggest

juhoteperi 2020-04-13T11:38:19.453300Z

^ related to @thheller comments

dnolen 2020-04-13T11:38:39.453500Z

I think automatically checking for those cases is a bad idea w/ limiting to target

juhoteperi 2020-04-13T11:43:34.455300Z

Yeah, maybe it is best to leave goog.global intact by default? MAYBE option to set it to something IF webpack or other tools don't have better way handle this. It depends on where the bundle is used, what the global object should be.

dnolen 2020-04-13T11:46:56.456500Z

Another option instead of mucking around with goog/base.js - we could just make a new compiler option to set this

dnolen 2020-04-13T11:47:11.456900Z

independent of target, because I see that conflating is an issue

dnolen 2020-04-13T11:50:57.457900Z

@thheller I've never personally seen cases where setting target at the end of core.cljs is a problem - do you have something specific? this after implementing in a bunch of environments, browser, Node, React Native etc.

thheller 2020-04-13T11:52:36.458300Z

might be less of on issue today with the new goog.define logic

thheller 2020-04-13T11:52:56.458800Z

but it used to be a problem that the goog.define in goog/base.js would then be defined in another scope

dnolen 2020-04-13T11:53:31.459100Z

yeah it's not .a problem as far as I could tell

juhoteperi 2020-04-13T11:57:49.459700Z

Webpack has way to set module this to window: https://webpack.js.org/loaders/imports-loader/

dnolen 2020-04-13T12:03:19.460500Z

@juhoteperi right but this will be different in every bundler - I'm ok w/ having a way to control this because ^:export is critical

juhoteperi 2020-04-13T12:04:32.460900Z

Yeah. Separate compiler option sounds ok to me.

dnolen 2020-04-13T12:44:57.461900Z

no new compiler option, it's just a new goog-define

dnolen 2020-04-13T12:45:37.462500Z

only supports string value: "window", "global", or "self"

dnolen 2020-04-13T12:45:48.462700Z

@juhoteperi let me know if that works for you

juhoteperi 2020-04-13T12:59:54.463200Z

@dnolen It works

dnolen 2020-04-13T13:27:12.463400Z

great

dnolen 2020-04-13T15:23:49.463800Z

draft announcement for the new bundle target - https://github.com/clojure/clojurescript-site/blob/april-release-target-bundle/content/news/2020-04-13-bundle-target.adoc

dnolen 2020-04-13T15:23:54.464200Z

feedback welcome!

dnolen 2020-04-13T15:32:19.465Z

a lot of the changes/fixes to master were based on a new React Native tool I've been working on for the past three weeks

dnolen 2020-04-13T15:32:22.465200Z

https://github.com/vouchio/krell

dnolen 2020-04-13T15:33:01.466400Z

if you're curious how to leverage cljs.main and the new build target in a custom build tool - this is worth checking out 🙂

lilactown 2020-04-13T15:44:16.467100Z

re: krell, very cool. it looks like it doesn’t support hot-loading yet; do you use a REPL workflow atm?

lilactown 2020-04-13T15:57:36.471600Z

I’m v interested in creating an easy hot reloading experience that takes advantage of the new react-refresh package. It’s a little tricky tho.

lilactown 2020-04-13T16:05:09.473Z

react-refresh requires that when changing a file, all files in the dependency tree up to the root will be reloaded. This is to support e.g. changing a function or constant in a file, that gets required by another file, that then gets required and used in a component, will properly invalidate the component and trigger React to re-render that component. figwheel and shadow-cljs typically takes the simpler approach of only reloading the file changed and it’s direct ancestors because we assume everything is in the global scope and that we don’t do side-effects on reload (which react-refresh is essentially a side-effect on reload)

dnolen 2020-04-13T16:08:48.473400Z

hot-loading is under development, but this ClojureScript so it's trivial

dnolen 2020-04-13T16:10:15.474300Z

re: REPL - that's mostly what Krell does - REPL stuff - the bundler stuff is just reusing ClojureScript master

lilactown 2020-04-13T16:10:54.474900Z

I feel like if I could figure out how to handle these react-refresh cases from a REPL, it would make everything else easier

lilactown 2020-04-13T16:11:39.475500Z

the “side-effect on defn ” pattern that react-refresh heavily encourages makes it more difficult

dnolen 2020-04-13T16:12:03.475800Z

@lilactown I think the only thing is to not swim upstream

dnolen 2020-04-13T16:12:16.476100Z

Krell auto-reconnects after a React refresh

dnolen 2020-04-13T16:12:27.476400Z

so what you're talking about probably just works

lilactown 2020-04-13T16:12:48.476600Z

hmm not sure yet

dnolen 2020-04-13T16:13:13.477500Z

the point is you cannot preserve the REPL state - but depending on what you're doing who cares?

dnolen 2020-04-13T16:13:43.478300Z

the point of auto-reconnect is that you can just follow all the usual React guidelines

dnolen 2020-04-13T16:13:55.478800Z

no divergence

lilactown 2020-04-13T16:14:53.479700Z

yeah, I want to preserve the behavior you get when enabling “Fast Refresh” in React Native

dnolen 2020-04-13T16:14:54.479800Z

I'm not saying of course that react-refresh works - just saying that's definitely one of things I'm interested in doing different w/ Krell

dnolen 2020-04-13T16:15:10.480300Z

that is if you want to use react-refresh Krell should get out of your damn way

dnolen 2020-04-13T16:15:45.481300Z

disabling React refresh should be entirely an optional thing because you want to do a stateful REPL session

lilactown 2020-04-13T16:16:15.481800Z

yep, mostly thinking out loud hoping to glean some good ideas 🙂

lilactown 2020-04-13T16:16:42.482800Z

I think there’s two kinds of refresh in RN: a full reload of the app bundle on change, and the new “Fast Refresh” feature IIRC

dnolen 2020-04-13T16:16:43.482900Z

my good idea - don't mess up React stuff and React workflow if users want it

dnolen 2020-04-13T16:16:50.483100Z

no other good ideas

lilactown 2020-04-13T16:18:11.484500Z

The “Fast Refresh” mode preserves state across reloads - even local component state - but requires you to generate signatures for each component that get invalidated on file change. this is done by a babel plugin that RN gets shipped with, which obviously won’t work with CLJS

lilactown 2020-04-13T16:19:57.485500Z

a react wrapper lib (like helix/reagent/etc.) can generate these signatures using a macro, but requires integration at the reload step to properly invalidate them like I was saying

lilactown 2020-04-13T16:20:17.485800Z

I dunno, just thinking out loud. thanks for listening

dnolen 2020-04-13T16:22:02.486700Z

oh because they process the JS

dnolen 2020-04-13T16:23:18.487300Z

yeah, I dunno I'd have to look more closely at how it works to have any clearer thoughts

dnolen 2020-04-13T16:24:36.488600Z

@lilactown but one question I have is how is react-refresh really any better than just developing a RN Reagent app over a state atom w/ Figwheel / shadow / soonish Krell?

lilactown 2020-04-13T16:25:08.488800Z

yes, IMO

lilactown 2020-04-13T16:25:19.489100Z

the ability to reload while preserving local component state is huge

dnolen 2020-04-13T16:25:43.489800Z

why?

dnolen 2020-04-13T16:25:51.490300Z

if you write all state into an atom same result no?

lilactown 2020-04-13T16:26:01.490700Z

it completely changes the way that the DX encourages you to architect your app

dnolen 2020-04-13T16:26:16.491200Z

In a web app this often not that fun - but for shallow view graphs in mobile I don't see the problem

lilactown 2020-04-13T16:26:48.491700Z

if you take the stance that local state and global state are functionally and architecturally identical, I agree with you.

dnolen 2020-04-13T16:27:15.493Z

that's all I'm interested in though - if the end result is same performance, same experience

dnolen 2020-04-13T16:27:22.493300Z

what do you need the distinction for?

lilactown 2020-04-13T16:27:37.493800Z

IME the performance and experience is not the same

dnolen 2020-04-13T16:28:15.495Z

I haven't followed along but you also have Om inspired projects - the reconciler does what you're talking about

dnolen 2020-04-13T16:28:29.495500Z

Om's idea is that you have global state - but the reconciler gives you precise updates

lilactown 2020-04-13T16:28:33.495700Z

especially with concurrent mode unlocking more perf and experience knobs for devs, which works best with local component state

dnolen 2020-04-13T16:30:17.496700Z

like I said I don't have a strong opinion and I personally think there are alternatives

dnolen 2020-04-13T16:32:10.497400Z

reading over https://reactnative.dev/docs/fast-refresh it doesn't seem very simple and lots of caveats - so meh

orestis 2020-04-13T16:40:24.001200Z

Haven’t dove down to fast-refresh for React Dev yet, but I can comment on the state bit - my goal is to take advantage of the new React Concurrent mode when it lands. So far, and until some new docs land, React wants to you let it handle state (there was months of churn to figure out how this could work with global state).

orestis 2020-04-13T16:44:08.004600Z

This also impacts you more the more you rely on hooks, and the more you rely on JS components that use hooks. Fast-refresh promises to keep state from hooks and rerender, for free. Seeing that esp. for UI work local state makes some sense, preserving that makes sense.

orestis 2020-04-13T16:45:41.005100Z

I don’t have much more insight :)

dnolen 2020-04-13T16:52:41.006300Z

@orestis yeah I haven't followed the Concurrent mode stuff that closely - it does look interesting - but I don't know what you mean by "React wants you to let it handle state"

dnolen 2020-04-13T16:52:59.006800Z

you write a functional component, you use a hook? what aren't you handling?

lilactown 2020-04-13T16:55:34.007500Z

what he means is that, Concurrent mode works best when your state is coupled to an instance of a component.

lilactown 2020-04-13T16:56:19.008300Z

construction/destruction relies on mount/unmount, updates to state mean the component re-renders, etc.

lilactown 2020-04-13T16:58:11.010100Z

concurrent mode allows React to pause rendering a tree and resume rendering that same tree later. this creates problems if the state that was rendered in multiple parts of the tree has changed in between pausing and resuming

lilactown 2020-04-13T17:04:09.015Z

React can handle this in a transactional fashion if you manage state inside the component instance. it essentially puts state updates on a queue that gets computed on the render that it triggers. if you store state outside of a component instance, then React can’t handle those state updates for you - if you update an external state atom in a naive synchronous way then you can end up with parts of your tree that were rendered using an old atom state, and parts that were rendered using a newer atom state. if you store state once, and it lives in a component, then resuming the tree will either re-use the state updates already computed inside that render, or compute those state updates against the latest state. you avoid the sort of coherency problems that state external to the tree can introduce.

lilactown 2020-04-13T17:04:57.015800Z

react is adding more tools to handle external state but the happy path is definitely storing it inside a component using useState / useReducer etc

dnolen 2020-04-13T17:07:11.016400Z

yeah gonna have to look at the docs more - thanks for summary's though - helpful

👍 1
orestis 2020-04-13T17:09:15.019800Z

The most annoying thing is that this is very much in flux. This approach for examples invalidates all the major React global state managers (redux, relay, Apollo). There’s an RFC called useMutableSource IIRC that seems to handle this, and to my knowledge @mhuebert did a POC some time ago for ClojureScript. I’ve kind of decided that I’ll wait until an official release or more guidance is available.

orestis 2020-04-13T17:10:11.021300Z

My only fear is that as with fast-refresh, the React devs will end up with just a Babel/webpack plug-in that we will have a hard time incorporating into our dev workflow.

dnolen 2020-04-13T17:10:37.021900Z

yeah that was my immediate impression

dnolen 2020-04-13T17:10:42.022300Z

not compatible w/ existing libs

dnolen 2020-04-13T17:11:18.024200Z

in fact that's the part that I find kinda busted about it

orestis 2020-04-13T17:11:23.024500Z

If I had time to focus on this I’d definitely try to reach out to the React team, they said they wanted to release concurrent mode under an experimental release so that tooling can catch up. Sadly my day job leaves zero time for this kind of low level stuff.

dnolen 2020-04-13T17:11:28.024700Z

why not just make a new library - don't call it React

orestis 2020-04-13T17:12:17.026400Z

Heh, JS doesn’t work like that. React-router is in its 6th or 7th version.

lilactown 2020-04-13T17:12:51.027400Z

they have lots of paths for migration

orestis 2020-04-13T17:13:02.028Z

But to be fair to them, they are trying the best and using the new Facebook as a guinea pig.

orestis 2020-04-13T17:13:58.029800Z

The plan AFAICT is that the official release will be simultaneous with major libraries so the change for consumers will be mostly under the hood.

dnolen 2020-04-13T17:14:38.031Z

well this still seems a bit far out to me and upgrading legacy applications seems like a monumental task

dnolen 2020-04-13T17:14:49.031400Z

so not much bearing on a RN REPL at this point 😛

lilactown 2020-04-13T17:15:30.032300Z

yep 😛 all of this CM talk is just motivation for why I desire good react-refresh integration

lilactown 2020-04-13T17:15:37.032600Z

but it sounds like I can hopefully build it myself if need be

lilactown 2020-04-13T17:15:44.032800Z

it works quite well with shadow-cljs right now too

lilactown 2020-04-13T17:16:06.034Z

I expect that libs and apps that use non-CM safe patterns will continue to be supported for a long time. there are a lot of different “modes” that allow devs to tune React to what works with their code

orestis 2020-04-13T17:16:26.034800Z

Actually the new bundle stuff sounds like we can finally start releasing tools that depend on React and other npm stuff more easily.

lilactown 2020-04-13T17:16:35.035100Z

the benefits to adopting CM are mainly around unlocking better UX

dnolen 2020-04-13T17:16:48.035400Z

@orestis yes that's the point

orestis 2020-04-13T17:18:03.035700Z

Super happy about it, thanks

2020-04-13T17:19:19.035800Z

I totally wish React had put Concurrent into a new lib with different name. I am just glad that this useMutableSource stuff is finally arriving. Looks to me like it is going to work well.

alexmiller 2020-04-13T17:34:21.036200Z

@dnolen was there a tools/repls page that got removed on the cljs site?

dnolen 2020-04-13T17:35:18.036900Z

@alexmiller which one? I deleted a lot of stuff

alexmiller 2020-04-13T17:35:18.037Z

yeah, guess so - that was the top nav link for tools, so this broke a bunch of nav

dnolen 2020-04-13T17:36:42.037800Z

yeah that's just way out of date don't want people looking at that anymore

dnolen 2020-04-13T17:36:53.038100Z

that's before we switched to 1.X naming I think

dnolen 2020-04-13T17:38:25.038400Z

@alexmiller you're not talking about internal links right?

dnolen 2020-04-13T17:38:36.038700Z

I can clean that up - but nav stuff I don't think I can

alexmiller 2020-04-13T17:38:57.039100Z

I'm talking about the top level nav - the Tools link went to that page

alexmiller 2020-04-13T17:39:10.039400Z

I'm fixing it up now that I understand what happened

alexmiller 2020-04-13T17:39:16.039600Z

I thought I broke it :)

dnolen 2020-04-13T17:41:58.040200Z

ah k, I didn't understand nav worked that way - it shouldn't have been the top link at this point

alexmiller 2020-04-13T17:46:44.041100Z

I can easily add redirects from old links to somewhere new too if you run into that, there's a list of those in the deployment

alexmiller 2020-04-13T17:48:46.041700Z

should be fixed up now - there's now a tools/tools page which is in the clojurescript-site that mostly matches the left nav

dnolen 2020-04-13T18:04:02.041900Z

k thanks!

orestis 2020-04-13T18:32:09.043300Z

@dnolen not sure if you are monitoring ClojureVerse, some comment left there on Node versions: https://clojureverse.org/t/test-drive-the-beta-clojurescript-js-bundler-integration-support/5779

dnolen 2020-04-13T18:36:28.044Z

@orestis chimed in, not sure what's going on there seems similar to what @juhoteperi but I think missed the root cause

dnolen 2020-04-13T18:36:39.044300Z

I did the tutorial with Node 10.16.0 myself

orestis 2020-04-13T18:37:03.044900Z

Cool I didn’t know if you had an account :)

juhoteperi 2020-04-13T18:53:27.046200Z

Related to JS modules, I've been already thinking about adding notice to Cljsjs page and repository strongly suggesting using other ways to consume JS libraries. Now is even better time for that.

👍 1
dnolen 2020-04-13T18:58:17.046600Z

@juhoteperi yes, but let's wait for the release

dnolen 2020-04-13T18:58:43.047300Z

then it doesn't matter what tool people use they can follow that guideline easily

juhoteperi 2020-04-13T19:51:43.048300Z

I close this one old module processing issue, couldn't reproduce the problem now: https://clojure.atlassian.net/projects/CLJS/issues/CLJS-2836

dnolen 2020-04-13T20:11:03.048500Z

👍:skin-tone-4:

juhoteperi 2020-04-13T20:21:00.049100Z

I think https://clojure.atlassian.net/browse/CLJS-1543 this is now done (goog.module support)?

dnolen 2020-04-13T20:45:53.049300Z

yes