S.K*_*ers 7 javascript ruby-on-rails reactjs webpack react-hot-loader
我正在尝试使用react-hot-loader设置webpack热重装.它似乎主要是工作.我在现有的rails应用程序中使用webpack.
但它不是热重装.每次我的反应代码改变时,它只是触发重载.我得到的错误消息是:
[HMR] Cannot apply update. Need to do a full reload! - dev-server.js:18
[HMR] Error: Aborted because 0 is not accepted - dev-server.js:19
at hotApply (http://localhost:8080/assets/webpack/bundle.js?body=1:380:31)
at hotUpdateDownloaded (http://localhost:8080/assets/webpack/bundle.js?body=1:293:13)
at hotAddUpdateChunk (http://localhost:8080/assets/webpack/bundle.js?body=1:273:13)
at webpackHotUpdateCallback (http://localhost:8080/assets/webpack/bundle.js?body=1:5:12)
at http://localhost:8080/assets/webpack0.bd89931b2fa8e2901794.hot-update.js:1:1
Navigated to http://lvh.me:3000/react_page
Run Code Online (Sandbox Code Playgroud)
这是我的webpack.hot.config.js设置:
var path = require('path');
var webpack = require('webpack');
var config = module.exports = {
// Set 'context' for Rails Asset Pipeline
context: __dirname,
entry: {
App: [
'webpack-dev-server/client?http://localhost:8080/', // WebpackDevServer host and port
'webpack/hot/only-dev-server', // "only" prevents reload on syntax errors
'./app/frontend/javascripts/app.js' // Your app?s entry point
],
vendor: ['jquery', 'react', 'react-dom', 'react-redux', 'redux','redux-thunk']
},
devtool: 'inline-source-map',
// Require the webpack and react-hot-loader plugins
plugins: [
//new webpack.HotModuleReplacementPlugin(),
new webpack.optimize.CommonsChunkPlugin(
{
name: 'vendor',
chunks: [''],
filename: 'vendor.js',
minChunks: Infinity
}),
new webpack.NoErrorsPlugin(),
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery',
'window.jquery': 'jquery'
})
],
module: {
loaders: [
{
test: /\.jsx?$/,
exclude: /node_modules/,
loaders: [
'react-hot',
'babel?presets[]=es2015&presets[]=react'
],
cacheDirectory: true
}
]
},
output: {
path: path.join(__dirname, 'app', 'assets', 'javascripts', 'webpack'), // Save to Rails Asset Pipeline
filename: 'bundle.js', // Will output App_wp_bundle.js
publicPath: 'http://localhost:8080/assets/webpack',
//publicPath: 'http://localhost:8080/assets/webpack' // Required for webpack-dev-server
},
resolve: {
extensions: ['', '.js', '.jsx'],
modulesDirectories: ['node_modules'],
},
};
Run Code Online (Sandbox Code Playgroud)
我运行代码
webpack-dev-server -d --config webpack.hot.config.js --hot --inline
Run Code Online (Sandbox Code Playgroud)
rails开发环境通过webpack-dev-server为应用程序资产管道外的webpack文件提供服务,因为我的development.rb文件中有以下设置.
config.action_controller.asset_host = Proc.new { |source|
if source =~ /webpack\/bundle\.js$/i
"http://localhost:8080"
end
}
Run Code Online (Sandbox Code Playgroud)
我一直试图让这个工作几个小时.任何帮助,将不胜感激.
多谢你们!
好吧我得到了同样的错误,但在尝试了一些事情之后我想出了这个:我的根组件是一个无状态功能组件(纯函数).我将它重构为类组件和BAM!热重装正在重新开始.
之前:
const App = (props) => (
<div>
<Header links={headerLinks} logoSrc={logoSrc} />
{props.children}
</div>
);
Run Code Online (Sandbox Code Playgroud)
后:
class App extends React.Component {
render() {
return (
<div>
<Header links={headerLinks} logoSrc={logoSrc} />
{this.props.children}
</div>
);
}
}
Run Code Online (Sandbox Code Playgroud)
由于上面提供的答案在我这边仍然无法使用webpack 5 ,这是webpack的工作配置
在webpack.config.js中
devServer: {
.
.
.
hot: true,
}
Run Code Online (Sandbox Code Playgroud)
在 webpack 入口点index.js添加
if (module.hot) {
module.hot.accept();
}
Run Code Online (Sandbox Code Playgroud)
在package.json启动脚本中
"scripts": {
.
.
"start": "webpack serve --config /webpack.config.js"
},
Run Code Online (Sandbox Code Playgroud)
我不知道这是否会具体帮助您的问题,但我最近也遇到了这个错误 - 我通过向我.js尝试使用 hmr 设置的模块添加扩展来修复它 - 这是我的代码
if (module.hot) {
module.hot.accept('app/Routes', () => (
getRoutes = require('app/Routes')
))
}
Run Code Online (Sandbox Code Playgroud)
我getRoutes = require('app/Routes.js')使用 更新了它,错误消失了webpack ^2.0.0-beta。
如果我将 JS 扩展添加为热接受的第一个参数,它也可以工作,如下所示:
if (module.hot) {
module.hot.accept('app/Routes.js', () => (
getRoutes = require('app/Routes')
))
}
Run Code Online (Sandbox Code Playgroud)
所以现在它与webpack HMR 页面上的内容匹配
| 归档时间: |
|
| 查看次数: |
4568 次 |
| 最近记录: |