3.0 KiB
0.8 Upgrade guide
The necessary changes depend on what environment you target, and how you want to provide React.
Build | Browser | Node | |
---|---|---|---|
Cljsjs | :none |
Supported | Requires Cljs 1.10.145+ |
Cljsjs | :advanced |
Supported | Requires Cljs 1.10.145+ |
node modules |
:none |
Supported | Supported |
node modules |
:advanced |
Supported | Partially supported ( ReactDOM/server currently broken) |
Browser - Cljsjs
Using Reagent with Cljsjs packages doesn't require changes, other than making sure you update Cljsjs React dependencies, if you have direct dependencies to them.
Browser - node modules
If react
, react-dom
and create-react-class
are available in node_modules
directory, ClojureScript compiler will use these with Reagent. To disable this by adding :npm-deps false
compiler option.
If you don't want to call npm
and manage package.json
, you can use :npm-deps
and :install-deps
compiler options to
install the packages automatically.
You can use :process-shim
compiler option to provide process.env.NODE_ENV
constant which is used by JS code to enable development and production
builds. ClojureScript compiler will automatically set this constant to
production
value when using :advanced
optimizations. This enables
the React production build.
Browser - loading React from CDNJS or custom Webpack bundle
TODO: Not tested properly
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:
:foreign-libs
[{:file "empty.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 f7d611d87f
Available in 1.0.46+
Reagent should use Cljsjs libraries by default even when running on Node.
NodeJS - node modules
Install react
, react-dom
and create-react-class
npm packages,
and ClojureScript should automatically use require
to
load React for Reagent.
Electron
???
React-native
https://github.com/drapanjanas/re-natal/issues/128
Common Problems
Mismatch with Cljsjs and npm packages
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.