babel-plugin-dva-core-hmr
v1.1.1
Published
Babel plugin to support HMR for dva-core or dva
Downloads
14
Readme
babel-plugin-dva-core-hmr
HMR support for dva-core/dva, only suppport dva>=2.4.0
or dva-core>=1.4.0
. Especially useful for those apps using dva-core
instead of dva
. When this plugin is enabled, HMR will be enabled for dva models.
Installation
yarn
yarn add babel-plugin-dva-core-hmr
npm
npm install babel-plugin-dva-core-hmr
.babelrc:
{
"plugins": ["dva-core-hmr"]
}
What it does
It will add HMR code for app.model
call. require "dva-core": "^1.4.0"
Taking from the test snapshots, it does this:
import HomeModel from '../model/home';
app.model(HomeModel)
↓ ↓ ↓ ↓ ↓ ↓
import HomeModel from '../model/home';
app.model(HomeModel);
if (module.hot) {
module.hot.accept("../model/home", () => {
try {
let newModel = require("../model/home");
if (newModel.default) newModel = newModel.default;
app.replaceModel(newModel);
} catch (e) {
console.error(e);
}
});
}
For more usages, please find the detail in
./__tests__/index.js
Options
appNames
:what dva-core/dva instance names should be matched. default: ['app']
appImport
+ appImportName
: if app.model
doesn't get run on module level, whe webpack HMR happens, HMR code of model won't get excuted, and with these two options set, HMR code of model will to promoted to module level. Please find more information in tests.
Why HMR does't work?
- Check whether
babel-loader
is enabled for those models. - Check whether
app.model
is called. If not, please change plugin configappNames
. For example, if your code hasdva.model
and you want to enable HMR, please change config toappNames: ['dva']