From f9723aab43667f17e5efb28e72deb14570137cc9 Mon Sep 17 00:00:00 2001 From: Juho Teperi Date: Sat, 16 Jun 2018 01:01:15 +0300 Subject: [PATCH] Update 0.8-upgrade.md --- doc/0.8-upgrade.md | 41 +++++++++++++++++++---------------------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/doc/0.8-upgrade.md b/doc/0.8-upgrade.md index 37c44ac..2b81e23 100644 --- a/doc/0.8-upgrade.md +++ b/doc/0.8-upgrade.md @@ -7,20 +7,8 @@ how you want to provide React. |---|---|---|---| | Cljsjs | `:none` | Supported | Requires Cljs 1.10.238+ | | Cljsjs | `:advanced` | Supported | Requires Cljs 1.10.238+ | -| `node modules` | `:none` | Known problems (1) | Supported | -| `node modules` | `:advanced` | Known problems (2) | Supported | - -While Reagent 0.8 supports use with React from npm, there are known problems: - -1. Closure can't properly handle React 16 CommonJS module pattern: https://github.com/google/closure-compiler/issues/2841 -This causes the production React code being loaded even for development builds. -Using Chrome React Developer Tools with this setup will break Reagent. Fixed by `[com.google.javascript/closure-compiler-unshaded "v20180610"]` ([PR](https://github.com/google/closure-compiler/pull/2963)), will be -the included in next the ClojureScript release. - -2. Closure optimization currently breaks certain statically created objects which are -accessed dynamically in `ReactDOM/server`: https://github.com/facebook/react/issues/12368 -Fixed by using `[com.google.javascript/closure-compiler-unshaded "v20180319"]` ([fix commit](https://github.com/google/closure-compiler/commit/c13cf48b98477e44409dba6359246bffa95b1c7b)), will be -the default in next ClojureScript release. +| `node modules` | `:none` | Requires Cljs 1.10.312 | Supported | +| `node modules` | `:advanced` | Requires Cljs 1.10.312 | Supported | ## Browser - Cljsjs @@ -55,28 +43,23 @@ will in these cases rename the statically object properties, which will break dynamically accessing the objects. Externs fix this by defining which properties must not be renamed. -## Browser - loading React from CDNJS or custom Webpack bundle +## Browser - Webpack -**TODO: Not tested properly** +https://clojurescript.org/guides/webpack If you want to load React.js yourself from external JS file (CDN) or from custom bundle, it should be possible to override the Cljsjs foreign-libs, while still using externs from Cljsjs packages. To override the foreign-libs, you can provide following compiler option: ```clj :foreign-libs - [{:file "empty.js", + [{:file "bundje.js", :provides ["react" "react-dom" "create-react-class" "react-dom/server"], - :requires [], :global-exports {react React react-dom ReactDOM create-react-class createReactClass react-dom/server ReactDOMServer}}] ``` -You'll also need to create the mentioned `empty.js` file (FIXME: relative to `project.clj`?). - -If your bundle provides other libraries, you could extern `:provides` and `:global-exports` (e.g. `prop-types`). - ## NodeJS - Cljsjs Requires https://github.com/clojure/clojurescript/commit/f7d611d87f6ea8a605eae7c0339f30b79a840b49 @@ -107,3 +90,17 @@ If you have one npm package installed, e.g. `react`, you also need to provide others (`react-dom` and `create-react-class`), else Cljsjs packages would be used for these, and packages from different sources don't work together. + +### Previous problems + +Before ClojureScript 1.10.312 there were couple of problems with npm support: + +1. Closure can't properly handle React 16 CommonJS module pattern: https://github.com/google/closure-compiler/issues/2841 +This causes the production React code being loaded even for development builds. +Using Chrome React Developer Tools with this setup will break Reagent. Fixed by `[com.google.javascript/closure-compiler-unshaded "v20180610"]` ([PR](https://github.com/google/closure-compiler/pull/2963)), will be +the included in next the ClojureScript release. + +2. Closure optimization currently breaks certain statically created objects which are +accessed dynamically in `ReactDOM/server`: https://github.com/facebook/react/issues/12368 +Fixed by using `[com.google.javascript/closure-compiler-unshaded "v20180319"]` ([fix commit](https://github.com/google/closure-compiler/commit/c13cf48b98477e44409dba6359246bffa95b1c7b)), will be +the default in next ClojureScript release.