Øyv*_*hen 6 node.js express webpack webpack-dev-server webpack-hmr
我正在创建一个带有节点/快速后端和反应前端的webapp.我(我认为)大部分都已启动并运行,但是让浏览器执行热刷新的最后一步并不按预期工作.我将尝试在此发布所有相关设置.如果您需要其他任何信息,请告知我我在哪里弄错了:
我启动了我的应用程序 node ./server/index.js
webpack.config.js var path = require('path'); var webpack = require('webpack');
let webpackConfig = {
name: 'server',
output: {
path: path.join(__dirname, 'dist'),
filename: 'bundle.js',
publicPath: '/dist/',
},
resolve: {
extensions: [
'', '.js', '.jsx', '.json'
]
},
module: {
loaders: [
{
test: /\.(js|jsx)$/,
loader: 'babel-loader',
exclude: /node_modules/,
query:{
presets: ['es2015', 'react', 'stage-2']
}
},
{
test: /\.json$/,
loader: 'json-loader'
}
]
},
entry: [
'webpack-hot-middleware/client',
'./app/client/client.jsx'
],
plugins: [
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: JSON.stringify('production')
}
}),
new webpack.optimize.OccurenceOrderPlugin(),
new webpack.HotModuleReplacementPlugin(),
new webpack.NoErrorsPlugin()
]
};
export default webpackConfig;
Run Code Online (Sandbox Code Playgroud)
index.js只包括'babel-register'和'server.js'
server/server.js 从'webpack'导入webpack; 从'../webpack.config'导入webpackConfig; 从'webpack-dev-middleware'导入webpackDevMiddleware; 从'webpack-hot-middleware'导入webpackHotMiddleware;
import express from 'express';
const app = express();
const renderPage = () => {
return `
<!doctype html>
<html>
<head>
<title>Brewing Day</title>
<meta charset='utf-8'>
</head>
<body>
<h1>Hello from server.js!!</h1>
<div id='root'></div>
<script src='/dist/bundle.js'></script>
</body>
</html>
`;
};
const compiler = webpack(webpackConfig);
app.use(webpackDevMiddleware(compiler, {
noInfo: true,
publicPath: webpackConfig.output.publicPath })
);
app.use(webpackHotMiddleware(compiler));
app.use((req, res, next) => {
res.status(200).end(renderPage());
});
const server = app.listen(3005, () => {
const host = server.address().address;
const port = server.address().port;
console.log(`Listening at http://${host}:${port}`);
})
export default server;
Run Code Online (Sandbox Code Playgroud)
和应用程序/客户端/ client.jsx是在配置的WebPack入口点:
import React from 'react';
import ReactDOM from 'react-dom';
import Application from '../components/application.jsx';
window.addEventListener('load', () => {
ReactDOM.render(<Application />, document.getElementById('root')
);
});
Run Code Online (Sandbox Code Playgroud)
在控制台中,当我启动时,它会列出以下行:
webpack built cc1194a11614a3ba54a3 in 730ms
Run Code Online (Sandbox Code Playgroud)
当我对例如client.jsx或application.jsx包含rect组件进行更改时,我在控制台中获得了两个新行:
webpack building...
webpack built 8d340a8853d3cfe9478d in 195ms
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好!
但是,在浏览器中,它不会更新并在控制台中显示以下警告:
[HMR] The following modules couldn't be hot updated: (Full reload needed)
This is usually because the modules which have changed (and their parents) do not know how to hot reload themselves. See http://webpack.github.io/docs/hot-module-replacement-with-webpack.html for more details.
[HMR] - ./app/components/application.jsx
Run Code Online (Sandbox Code Playgroud)
我试图随机加入module.hot.accept()到application.jsx.这可以摆脱警告,但如果没有点击F5并重新加载浏览器仍然没有更新.
知道我在这里缺少什么吗?我已经看到了另一个像我一样的设置示例,其中任何module.hot.accept()地方都没有任何调用,但我无法看到我的设置与其他设置的不同之处.
任何和所有帮助将不胜感激.
Øyv*_*hen 10
经过大量的挖掘,我找到了问题的答案.我正在创建我的基础React"类",如下所示:
class Application = () => {
return (
<div id="maincontent">
<MainMenu />
<ScreenContents />
</div>
)
};
Run Code Online (Sandbox Code Playgroud)
HMR不支持此功能,即使它受到React的支持.
我必须像这样明确地创建我的类:
class Application extends React.Component{
render (){
return (
<div id="maincontent">
<MainMenu />
<ScreenContents />
</div>
);
}
};
Run Code Online (Sandbox Code Playgroud)
然后HMR工作得很好:)
编辑:根据@akoskm评论,似乎webpack配置文件中的babel配置也可能是一个问题.以下是相关部分:
var babelSettings = {
presets: ['react', 'es2015', 'stage-2'],
env: {
development: {
plugins: [
['react-transform', {
transforms: [
{
transform: 'react-transform-hmr',
imports: [ 'react' ],
locals: [ 'module' ]
}
]
}]
]
}
}
};
Run Code Online (Sandbox Code Playgroud)
预设和环境对你来说可能不完全相同,但react-transform这里的东西是重要的部分.
{
test: /\.(js|jsx)$/,
loaders: ['babel?' + JSON.stringify(babelSettings)],
exclude: /node_modules/
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3084 次 |
| 最近记录: |