# 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: ```clj :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 https://github.com/clojure/clojurescript/commit/f7d611d87f6ea8a605eae7c0339f30b79a840b49 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.