Skip to content
Snippets Groups Projects
hotreload.md 2.82 KiB
subtitle: Live Code Editing

The Dome framework comes with live-editing facilities, provided by a combination of Webpack Hot Module Reloading and React Hot Loader. This allows you to live edit your code and style sheets in real time while application is running. This feature is only enabled in development mode, not in production mode used when packaging the application for some platform.

Hot reloading for React components is known to be a fragile feature and to suffer from certain limitations. Typically, files that can trigger live updates must be reachable from the ./src directory, without traversing symbolic links. Style sheets in *.css files can be live edited, and React components in *.js files as well. Most React components can be live-edited, provided they are defined in top-level variables or exported by modules. Generally, the component states are preserved during live-editing.

For live-editing to work properly, your source code must follow strict configuration settings. These rules are enforced when using configuration files and application entry points generated from Dome templates. Pay attention to the provided comments in generated files when modifying them.

By default, we suggest to install the Dome framework in the sub-directory ./dome of your project. Being outside ./src, this normally prevents Dome files to be live-edited. If you want to also live-edit the framework, you shall move the $(DOME) directory inside your own ./src. In particular, you might install the framework with DOME=src/dome for instance.

State Management: hot-reloading on React components preserves application states only when they are stored outside the reloaded module. This is the case for local states maintained in React components, as they live in the virtual DOM. However, for global application state stored in global variables of modules, they simply vanish when a module is hot-reloaded. Worst, the virtual DOM will be still bound to the old versions of the modules. However, you usually don't want to live-edit the global state of your application and mix new data with old ones. A good practice is to separate files holding global state from files implementing views. Hence, live-editing the views will not cause the global state modules to reload, and views will stay in sync with your data. If you ever modify the global state, you will have to reload the application window (CmdOrCtrl-R).

Versioning Note: the framework currently sticks on webpack version 3 and react-hot-loader version 3, because of limitations and issues when using electron-webpack with most recent versions of those libraries. However, we hope to be able to migrate to newer versions as soon as possible.