Create React apps with no build configuration, prepared to work with UI developers tools in IntelliJ IDEA.
- Creating an App – How to create a new app.
- Using IntelliJ IDEA tools abilities – How to use IntelliJ IDEA tools abilities.
- Modifying existing create-react-app application – How to modify existing create-react-app application to use IntelliJ IDEA tools abilities.
Create React App works on macOS, Windows, and Linux.
If something doesn’t work, please file an issue.
npx @haulmont/create-react-app my-app
cd my-app
npm startIf you've previously installed @haulmont/create-react-app globally via npm install -g @haulmont/create-react-app, we recommend you uninstall the package using npm uninstall -g @haulmont/create-react-app or yarn global remove @haulmont/create-react-app to ensure that npx always uses the latest version.
Then open http://localhost:3000/ to see your app.
When you’re ready to deploy to production, create a minified bundle with npm run build.
You don’t need to install or configure tools like webpack or Babel.
They are preconfigured and hidden so that you can focus on the code.
Create a project, and you’re good to go.
You’ll need to have Node 10.16.0 or later version on your local development machine (but it’s not required on the server). We recommend using the latest LTS version. You can use nvm (macOS/Linux) or nvm-windows to switch Node versions between different projects.
To create a new app, you may choose one of the following methods:
npx @haulmont/create-react-app my-app(npx is a package runner tool that comes with npm 5.2+ and higher, see instructions for older npm versions)
npm init @haulmont/react-app my-appnpm init <initializer> is available in npm 6+
It will create a directory called my-app inside the current folder.
Inside that directory, it will generate the initial project structure and install the transitive dependencies:
my-app
├── README.md
├── node_modules
├── package.json
├── .gitignore
├── public
│ ├── favicon.ico
│ ├── index.html
│ └── manifest.json
└── src
├── App.css
├── App.js
├── App.test.js
├── index.css
├── index.js
├── logo.svg
└── serviceWorker.js
└── setupTests.js
No configuration or complicated folder structures, only the files you need to build your app.
Once the installation is done, you can open your project folder:
cd my-appInside the newly created project, you can run some built-in commands:
Runs the app in development mode.
Open http://localhost:3000 to view it in the browser.
The page will automatically reload if you make changes to the code.
You will see the build errors and lint warnings in the console.
Runs the test watcher in an interactive mode.
By default, runs tests related to files changed since the last commit.
Builds the app for production to the build folder.
It correctly bundles React in production mode and optimizes the build for the best performance.
The build is minified and the filenames include the hashes.
Your app is ready to be deployed.
Package @haulmont/create-react-app creates react app, which pre-prepared to work with IntelliJ IDEA tools.
IntelliJ IDEA tools let you preview and inspect separate components in you react application.
For using it, you need to do next:
- Import DevSupport component from
@haulmont/react-ide-toolboxand wrap your root component into DevSupport - Create file with special prepared previews component. This component must content components, which you want to inspect. Every component must be wrapped into ComponentPreview (exported from
@haulmont/react-ide-toolbox) with setedpathproperty, in turn, they must be wrapped into uniform component Previews (exported from@haulmont/react-ide-toolbox). - Set component from step 2 to
ComponentPreviewsproperty of DevSupport component.
After that, IntelliJ IDEA tools will be ready to work.
For using example, let view next:
App component renders FirstComponent, SecondComponent and ThirdComponent:
App.js
import './App.css';
import FirstComponent from "./FirstComponent";
import SecondComponent from "./SecondComponent";
import ThirdComponent from "./ThirdComponent";
function App() {
return (
<div className="App">
<FirstComponent/>
<SecondComponent/>
<ThirdComponent/>
</div>
);
}
export default App;
FirstComponent.js
function FirstComponent() {
return (
<div>
I am first component
</div>
);
}
export default FirstComponent;
SecondComponent.js
function SecondComponent() {
return (
<div>
I am second component
</div>
);
}
export default SecondComponent;
ThirdComponent.js
function ThirdComponent() {
return (
<div>
I am third component
</div>
);
}
export default ThirdComponent;
For preview and inspecting FirstComponent, SecondComponent and ThirdComponent, create ComponentPreviews.js:
ComponentPreviews.js
import { Previews, ComponentPreview } from "@haulmont/react-ide-toolbox";
import FirstComponent from "./FirstComponent";
import SecondComponent from "./SecondComponent";
import ThirdComponent from "./ThirdComponent";
function ComponentPreviews() {
return (
<Previews>
<ComponentPreview path="/FirstComponent">
<FirstComponent />
</ComponentPreview>
<ComponentPreview path="/SecondComponent">
<SecondComponent />
</ComponentPreview>
<ComponentPreview path="/ThirdComponent">
<ThirdComponent />
</ComponentPreview>
</Previews>
);
};
export default ComponentPreviews;
Wrap App component into DevSupport component, and set ComponentPreviews:
index.js:
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import { DevSupport } from "@haulmont/react-ide-toolbox";
import ComponentPreviews from "./ComponentPreviews";
ReactDOM.render(
<React.StrictMode>
<DevSupport
ComponentPreviews={<ComponentPreviews/>}
>
<App />
</DevSupport>
</React.StrictMode>,
document.getElementById('root')
);
Now, IntelliJ IDEA tools ready to inspect FirstComponent, SecondComponent and ThirdComponent
DevSupport component export form @haulmont/create-react-app package. It's purpose is wrapping root react component for working IntelliJ IDEA tools. DevSupport component doesn't have any side effects, and your application will be work as usual after wrapping. DevSupport has 2 properties:
ComponentPreviews - this property await JSX tree value, which wrapped into Previews component (look using example)
useInitialHook - hook, which executed for init something. It could be hook with login operation for example. This hook must return status object {loading: boolean, error: boolean}.
Example:
const useLogin = () => {
const [status, setStatus] = useState({
loading: true,
error: false
});
useEffect(() => {
const login = "admin";
const password = "admin";
login(login, password)
.then(() => {
setStatus({
error: false,
loading: false
});
})
.catch(() => {
setStatus({
loading: false,
error: true
});
});
}, []);
return status;
};
Previews component export form @haulmont/create-react-app package. It's purpose is wrapping JSX tree (look using example), which will be passed to ComponentPreviews property of DevSupport component. it is necessary to work of IntelliJ IDEA tools.
ComponentPreview component export form @haulmont/create-react-app package. It's purpose is wrapping component to preview and inspect it (look using example). ComponentPreview has 2 properties:
path - this property await string value and this value must be unique among other ComponentPreview components.
propsEditInfo - this property await object value with structure: {constrolType, data}. Is needed for working properties panel editor of IntelliJ IDEA tools.
If you already have react application, which created with original create-react-app package, you can also using IntelliJ IDEA tools abilities. For theese you need to do next:
- remove
react-scriptsnpm package from your project and install@haulmont/react-scripts - install
@haulmont/react-ide-toolboxto your project - add next markup to head's inner of
index.htmlproject's template:
<% if (htmlWebpackPlugin.options.isReactIdeDevmode) { %>
<script src="%PUBLIC_URL%/static/js/devtools-no-server.js"></script>
<% } %>
example:
index.html (before):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="description"
content="Web site created using create-react-app"
/>
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<title>React App</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
</body>
</html>
index.html (after):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="description"
content="Web site created using create-react-app"
/>
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<% if (htmlWebpackPlugin.options.isReactIdeDevmode) { %>
<script src="%PUBLIC_URL%/static/js/devtools-no-server.js"></script>
<% } %>
<title>React App</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
</body>
</html>
- do all steps from here
Create React App is open source software licensed as MIT. The Create React App logo is licensed under a Creative Commons Attribution 4.0 International license.