In Frontend (React, Javascript) By Leigh Halliday February 09, 2018 Leigh Halliday

MobX in Create React App Without Ejecting

You do not have to eject from create-react-app to get support for decorators and other babel plugins. MobX works fantastic with decorators and I've always been ejecting to get that working... but there is no longer a need to do that!

In this video we'll take a look at how we can get MobX working with decorators without having to eject from create-react-app. We'll be using a package called react-app-rewired to accomplish this.

The full code is https://github.com/leighhalliday/mobx-decorators-without-ejecting

Packages Used

Here is a list of the packages we used in this demo:

  • react-app-rewired
  • react-app-rewire-mobx
  • babel-plugin-styled-components

Files Changed

In config-overrides.js:

const { injectBabelPlugin } = require("react-app-rewired");
const rewireMobX = require("react-app-rewire-mobx");

module.exports = function override(config, env) {
  config = injectBabelPlugin("babel-plugin-styled-components", config);
  config = rewireMobX(config, env);

  return config;
};

In package.json modify the scripts to be:

"scripts": {
  "start": "react-app-rewired start",
  "build": "react-app-rewired build",
  "test": "react-app-rewired test --env=jsdom",
  "eject": "react-app-rewired eject"
}