首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NODE_ENV检查如何使热加载成为页面刷新?

NODE_ENV检查如何使热加载成为页面刷新?
EN

Stack Overflow用户
提问于 2017-09-19 10:44:20
回答 1查看 454关注 0票数 1

最近我有一个热模块重新加载的项目设置,我使用这个脚本通过webpack- dev -server启动dev:

"NODE_ENV=development ./node_modules/.bin/webpack-dev-server --progress --config webpack.dev.js"

热模块重新加载工作。直到我改变

代码语言:javascript
运行
复制
if (module.hot) {
    module.hot.accept('./components/App', () => {
        renderWrapper(App);
    });
}

代码语言:javascript
运行
复制
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块的情况下创建生产版本,它会引起问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-20 06:55:08

如果在病情之前执行console.log(process.env.NODE_ENV),很可能会得到undefined。这就是为什么你的应用程序不能捕捉模块更新。

问题是您将NODE_ENV=development设置为nodejs的环境,而不是webpack的。在webpack.config.js中,将以下插件添加到插件列表中:

代码语言:javascript
运行
复制
new webpack.DefinePlugin({
  process: {
    env: {
      NODE_ENV: JSON.stringify(process.env.NODE_ENV || 'development')
    }
  }
})

这将告诉webpack将客户端代码中的process.env.NODE_ENV替换为适当的值。不要忘记在JSON.stringify中包装它,就像上面的例子一样。有关详细信息,请参阅此doc链接

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46298407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档