我可以使用 webpack 的热模块替换但不能使用 react 吗?
Can I use hot module replacement with webpack but not use react?
我尝试使用热模块替换但从未成功。
然后我发现这个repository,它可以很好地使用热模块替换。它使用了一个 react-hot loader,如果我删除这个 loader,我会得到错误:
[HMR] Cannot find update. Need to do a full reload!
我根据上面的repository调整了我的项目,但是我没有使用react,所以我没有使用react-hot loader,所以我总是得到上面的错误。
我可以使用 webpack 的热模块替换而不使用 react 吗?或者我只需要一个 xx-hot loader 来使其热模块可更换?
我的结构:
src
entry.js
index.html
server.js
webpack.config.js
index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script src="/static/bundle.js"></script>
</body>
</html>
entry.js:
document.write('hello');
server.js:
var webpack = require('webpack');
var WebpackDevServer = require('webpack-dev-server');
var config = require('./webpack.config');
new WebpackDevServer(webpack(config), {
publicPath: config.output.publicPath,
hot: true,
historyApiFallback: true
}).listen(3000, 'localhost', function (err, result) {
if (err) {
console.log(err);
}
console.log('Listening at localhost:3000');
});
webpack.config.js:
var path = require("path");
var webpack = require('webpack');
module.exports = {
devtool: 'eval',
entry: [
'webpack-dev-server/client?http://localhost:3000',
'webpack/hot/only-dev-server',
"./src/entry.js"
],
output: {
path: path.join(__dirname, "build"),
publicPath: '/static/',
filename: "bundle.js"
},
plugins: [
new webpack.HotModuleReplacementPlugin()
]
};
要支持 HMR,您的模块应至少将 module.hot.accept
定义为 True。 documentation 还定义了一个 Api 来描述您可能需要实现的模块应该如何重新加载。也许你可以看看 React Hot Loader 看看他们是怎么做到的。
简而言之 - 是的,你可以。
但是您需要编写代码来确定在热更换模块时要执行的操作。
您在搜索 HMR 时可能经常遇到 React(和 Redux)的原因是它们使 HMR 变得简单。在基于 React 和 Redux 的应用程序中,绝大多数代码由无状态函数(其中许多是纯函数或足够纯函数)组成,所有应用程序状态都在一个存储中。这使得热交换各种代码变得非常容易,然后只需根据旧状态重新渲染组件即可。
webpack HMR API 本身并没有那么复杂。困难的部分是弄清楚如何构建和工具化您自己的代码,以便可以在运行时安全地热交换其中的一些代码。如果您使用的是流行的库或框架,那么这项工作可能已经为您完成(就像 React 和 Redux 一样),否则您将需要自己完成。祝你好运!
这是 HMR 工作的入口点所必需的。它将通过产品中的缩小作为其 'unreachable' 代码
删除
if (module.hot) {
module.hot.accept();
}
我尝试使用热模块替换但从未成功。 然后我发现这个repository,它可以很好地使用热模块替换。它使用了一个 react-hot loader,如果我删除这个 loader,我会得到错误:
[HMR] Cannot find update. Need to do a full reload!
我根据上面的repository调整了我的项目,但是我没有使用react,所以我没有使用react-hot loader,所以我总是得到上面的错误。
我可以使用 webpack 的热模块替换而不使用 react 吗?或者我只需要一个 xx-hot loader 来使其热模块可更换?
我的结构:
src
entry.js
index.html
server.js
webpack.config.js
index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script src="/static/bundle.js"></script>
</body>
</html>
entry.js:
document.write('hello');
server.js:
var webpack = require('webpack');
var WebpackDevServer = require('webpack-dev-server');
var config = require('./webpack.config');
new WebpackDevServer(webpack(config), {
publicPath: config.output.publicPath,
hot: true,
historyApiFallback: true
}).listen(3000, 'localhost', function (err, result) {
if (err) {
console.log(err);
}
console.log('Listening at localhost:3000');
});
webpack.config.js:
var path = require("path");
var webpack = require('webpack');
module.exports = {
devtool: 'eval',
entry: [
'webpack-dev-server/client?http://localhost:3000',
'webpack/hot/only-dev-server',
"./src/entry.js"
],
output: {
path: path.join(__dirname, "build"),
publicPath: '/static/',
filename: "bundle.js"
},
plugins: [
new webpack.HotModuleReplacementPlugin()
]
};
要支持 HMR,您的模块应至少将 module.hot.accept
定义为 True。 documentation 还定义了一个 Api 来描述您可能需要实现的模块应该如何重新加载。也许你可以看看 React Hot Loader 看看他们是怎么做到的。
简而言之 - 是的,你可以。
但是您需要编写代码来确定在热更换模块时要执行的操作。
您在搜索 HMR 时可能经常遇到 React(和 Redux)的原因是它们使 HMR 变得简单。在基于 React 和 Redux 的应用程序中,绝大多数代码由无状态函数(其中许多是纯函数或足够纯函数)组成,所有应用程序状态都在一个存储中。这使得热交换各种代码变得非常容易,然后只需根据旧状态重新渲染组件即可。
webpack HMR API 本身并没有那么复杂。困难的部分是弄清楚如何构建和工具化您自己的代码,以便可以在运行时安全地热交换其中的一些代码。如果您使用的是流行的库或框架,那么这项工作可能已经为您完成(就像 React 和 Redux 一样),否则您将需要自己完成。祝你好运!
这是 HMR 工作的入口点所必需的。它将通过产品中的缩小作为其 'unreachable' 代码
删除if (module.hot) {
module.hot.accept();
}