2.7 KiB
0.8 Upgrade guide
The necessary changes depend on what environment you target, and how you want to provide React.
Browser - Cljsjs
Using Reagent itself with Cljsjs packages doesn't require changes, other than making sure you depend on the latest Cljsjs React packages, if you have direct dependencies to them.
Browser - node modules
You can use :npm-deps
and :install-deps
compiler options to
install the packages automatically.
If react
, react-dom
and create-react-class
are available in node_modules
directory, ClojureScript compiler will use these with Reagent. This
doesn't depend on use of :npm-deps
option! :npm-deps
option is only about
installing the dependencies, if packages are available in node_modules
directory, they will be used.
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
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.