reactjs - HMR 有时只更新

标签 reactjs webpack webpack-dev-server webpack-hmr

有人真的能顺利启动并运行 HMR 吗?我的只是有时热插拔。这怎么可能?我将编辑一行文本,它会交换。然后我会去编辑相同的文本,但它不会看到它。我使用的是 webpack 1.14。我花了太多时间在网上搜索每个示例并重做和配置我的 webpack.config。如果没有一些真正的文档来说明如何使用每次都能工作的 webpack-dev-server 来设置它,这件事是很困难的。对于 stackOverflow 和 webpack GitHub 问题部分上所有未解答的问题,您可能会认为除了创建者和一些专家之外没有人真正理解它。

我有一个如下所示的 webpack 配置:

var config = {
    entry: [
        'webpack-dev-server/client?http://localhost:8080',
        // bundle the client for webpack-dev-server
        // and connect to the provided endpoint
        'webpack/hot/only-dev-server',
        // bundle the client for hot reloading
        // only- means to only hot reload for successful updates
        DEV + "/index.jsx"],
    output: {
        path: OUTPUT,
        filename: "app.js",
        publicPath: '/',
    },
    devtool: 'inline-source-map',
    devServer: {
        hot: true,
        // enable HMR on the server
        contentBase: OUTPUT,
        // match the output path
        publicPath: '/'
        // match the output `publicPath`
    },
    plugins: [
        new ExtractTextPlugin('styles.css'),
        new webpack.NamedModulesPlugin(),
        /* new webpack.DefinePlugin({
             'process.env': {
                 NODE_ENV: JSON.stringify('production')
             }
         }),
         new webpack.optimize.UglifyJsPlugin()*/
    ],
    module: {
        loaders: [
            {
                test: /\.jsx?$/,
                include: DEV,
                loaders: ["react-hot", "babel-loader"],
            },
            {
                test: /\.css$/,
                loader: 'style-loader'
            }, {
                test: /\.css$/,
                loader: 'css-loader',
                query: {
                    modules: true,
                    localIdentName: '[name]__[local]___[hash:base64:5]'
                }
            }
        ],
    }
};

module.exports = config;

我的文件结构是:

-> EZTube
   -> dev
       ->TabComponent
           ->other source code files 
       ->index.jsx
   -> output
       ->app.js
       ->index.html
       ->styles.css
   -> webpack.config.js
   -> package.json

我的index.jsx看起来像:

import React from "react";
import ReactDOM from "react-dom";
import TabComponent from './TabComponent/TabComponent.jsx';
import { AppContainer } from 'react-hot-loader';



    ReactDOM.render(
        <TabComponent />,
        document.querySelector("#container")
    );

        if (module.hot) {
            module.hot.accept('./TabComponent/TabComponent.jsx', () => {
            const NewApp = require('./TabComponent/TabComponent.jsx').default
            ReactDOM.render(NewApp)
        });
    }

奇怪的是,当我进行更改时,有时会发生热交换。其他时候则完全没有。只是想知道是否有一些明智的互联网圣人能够理解为什么在当前的设置下会发生这种情况。

最佳答案

尽管我正在使用,但我也遇到了同样的间歇性 HMR 问题

  • webpack-dev-middleware
  • webpack-热中间件

由于 HMR 有时会工作,我怀疑差异并不总是能被检测到。

我在 Windows 上运行此程序,因此我尝试添加此配置

    watch: true,
    watchOptions: {
        aggregateTimeout: 300,
        poll: 1000, //seems to stablise HMR file change detection
        ignored: /node_modules/
    },

https://webpack.js.org/configuration/watch/

现在可以更一致地检测到我的 HMR。

关于reactjs - HMR 有时只更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41656195/

相关文章:

javascript - 使用 Webpack 和 Laravel Mix 解析动态模块

webpack - webpack-dev-server代理无效

javascript - 为什么 redux-sessionstorage 在恢复状态时不更新节点的属性?

javascript - 无法使用 webpack 缩小 css 代码

javascript - React Express 应用程序中的客户端 session 管理

reactjs - Webpack 2 配置用于 React 项目上的 System.import 树摇动和延迟加载

webpack-dev-server - 如何修复 webpack 中的 "Uncaught TypeError: Cannot read property ' call' of undefined"?

从 Angular 7 迁移后,Angular 8 无法构建

javascript - React JS 文件/视频压缩器

reactjs - 重新调整大小 : only resize one side