webpack-dev-server --hot与HotModuleReplacementPlugin()有何区别?

7

通过以下配置,我已经能够使用HotModuleReplacementPlugin()实现热模块替换,但是在运行webpack-dev-server时不能使用--hot。我的问题是为什么?

几乎所有最近的设置热模块替换的指南都使用--hot,但对我来说它不起作用。

var webpack = require("webpack");
var path = require("path");
 
const config = {
  entry: path.resolve(__dirname, 'app/index.js') ,
  output: {
    path: path.resolve(__dirname, 'output'),
    filename: 'bundle.js',
    publicPath: "static/"
  },
  module: {
    rules: [
      {test: /\.(js|jsx)$/, use: 'babel-loader'}
    ]
  },
  plugins: [
    new webpack.HotModuleReplacementPlugin()
  ]

};
 
module.exports = config;

我这样引用我的代码文件。

<script src="static/bundle.js"></script>

我这样运行我的服务器。

webpack-dev-server --inline --colors --progress

版本。

webpack-dev-server 2.3.0
webpack 2.2.1

使用这个设置,热模块加载正常工作。如果我删除插件,并在服务器上附加--hot运行(如许多示例中所示),我的热模块加载将无法正常工作。服务器会注册更改,转译会发生,我的网页似乎重新加载,但内容不会更新。
我通过http://localhost:8080/webpack-dev-server/index.html进行访问。
结构看起来像这样 + 一个node_modules目录。
.
├── app
│   └── index.js
├── index.html
├── output
│   ├── bundle.js
│   └── index.js
├── package.json
└── webpack.config.js

更新

我也尝试将devServer添加到webpack配置中,但结果相同。

devServer: {
compress: true,
publicPath: "http://localhost:8080/static/",
filename: "bundle.js",
hot: true,
inline: true

}

2个回答

2
您可能还想添加这个:

(此处保留HTML标记,请勿解释)。

entry: {
    'app': [
        'webpack-dev-server/client?http://localhost:8080',
        'webpack/hot/only-dev-server',
        `${PATHS.SOURCE}/index.jsx`
    ]
}

1
这个有点倒霉:模块未找到:错误:无法解析'/Users/jono/dev/recipist'中的'webpack-dev-server/client?http://localhost:8080' - jonofan

0
你在webpack.config.js文件中设置了devServer属性吗?
devServer: {
    ...
    historyApiFallback: true,
    hot: true,
    inline: true,
    compress: true,
    ...
},
plugins: [
     new webpack.HotModuleReplacementPlugin(),
     ...
],
...

package.json

"scripts": {
    "development": "webpack-dev-server --progress --colors"
}

刚刚尝试添加了那个,但结果没有改变。我猜想我传递给webpack-dev-server命令的标志也在做同样的事情。 - jonofan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接