最近我有一个热模块重新加载的项目设置,我使用这个脚本通过webpack- dev -server启动dev:
"NODE_ENV=development ./node_modules/.bin/webpack-dev-server --progress --config webpack.dev.js"
热模块重新加载工作。直到我改变
if (module.hot) {
module.hot.accept('./components/App', () => {
renderWrapper(App);
});
}到
if (process.env.NODE_ENV === 'development'){
// Original HMR code
}然后每次我改变一些东西,它就变成了一个完整的页面重新加载。我在Chrome的控制台中找到了以下日志:
HMR无法应用更新。需要做一个充分的重新装载!HMR错误:中止是因为./client/containers/SearchBox.jsx不接受更新传播: ./client/containers/SearchBox.jsx -> ./client/components/HomePage.jsx-> ./client/components/App/index.jsx -> ./client/index.jsx
为什么?
如果我不做development检查,一切都正常。
此外,我是否需要检查做HMR?如果我在没有取出HMR块的情况下创建生产版本,它会引起问题吗?
发布于 2017-09-20 06:55:08
如果在病情之前执行console.log(process.env.NODE_ENV),很可能会得到undefined。这就是为什么你的应用程序不能捕捉模块更新。
问题是您将NODE_ENV=development设置为nodejs的环境,而不是webpack的。在webpack.config.js中,将以下插件添加到插件列表中:
new webpack.DefinePlugin({
process: {
env: {
NODE_ENV: JSON.stringify(process.env.NODE_ENV || 'development')
}
}
})这将告诉webpack将客户端代码中的process.env.NODE_ENV替换为适当的值。不要忘记在JSON.stringify中包装它,就像上面的例子一样。有关详细信息,请参阅此doc链接。
https://stackoverflow.com/questions/46298407
复制相似问题