我已经在现有项目中添加了react-rails,我们正在慢慢迁移以做出反应.
目前的webpacker.yml
default: &default
source_path: app/javascript
source_entry_path: packs
public_output_path: packs
cache_path: tmp/cache/webpacker
# Additional paths webpack should lookup modules
# ['app/assets', 'engine/foo/app/assets']
resolved_paths: []
# Reload manifest.json on all requests so we reload latest compiled packs
cache_manifest: false
extensions:
- .jsx
- .js
- .sass
- .scss
- .css
- .module.sass
- .module.scss
- .module.css
- .png
- .svg
- .gif
- .jpeg
- .jpg
- .tsx
- .ts
development:
<<: *default
compile: true
# Reference: https://webpack.js.org/configuration/dev-server/
dev_server:
https: false
host: localhost
port: 3035
public: localhost:3035
hmr: true
# Inline should be set to true if using HMR
inline: true
overlay: true
compress: true
disable_host_check: true
use_local_ip: false
quiet: false
headers:
'Access-Control-Allow-Origin': '*'
watch_options:
ignored: /node_modules/
我在一个终端启动rails应用程序,在另一个终端启动./bin/webpack-dev-server,我可以看到编译中出现的热模块:
[./node_modules/webpack-dev-server/client/index.js?http://localhost:3035] (webpack)-dev-server/client?http://localhost:3035 7.93 kB {0} {1} [built]
[./node_modules/webpack-dev-server/client/overlay.js] (webpack)-dev-server/client/overlay.js 3.67 kB {0} {1} [built]
[./node_modules/webpack/hot/dev-server.js] (webpack)/hot/dev-server.js 1.61 kB {0} {1} [built]
[./node_modules/webpack/hot/emitter.js] (webpack)/hot/emitter.js 77 bytes {0} {1} [built]
[./node_modules/webpack/hot/log-apply-result.js] (webpack)/hot/log-apply-result.js 1.31 kB {0} {1} [built]
[./node_modules/webpack/hot/log.js] (webpack)/hot/log.js 1.04 kB {0} {1} [built]
[0] multi (webpack)-dev-server/client?http://localhost:3035 webpack/hot/dev-server ./app/javascript/packs/application.js 52 bytes {1} [built]
[1] multi (webpack)-dev-server/client?http://localhost:3035 webpack/hot/dev-server ./app/javascript/packs/server_rendering.js 52 bytes {0} [built]
问题是我正在运行./bin/webpack-dev-server我每次更新反应文件时都会刷新整页(而不是刚更新的组件).只有在dev服务器运行时才会刷新整页.此外,在整页刷新之前,我没有看到组件更新.
所以问题是,为什么webpack-dev-server发信号通知浏览器页面刷新,为什么组件不热重新加载?
最佳答案 这就是Webpack HMR的工作原理,如果你想在你的反应模块上启用HMR,你可以试试
React Hot Loader和
Webpack plugin
.用纱线安装反应装置
.编辑.babelrc文件并将react-hot-loader / babel添加到插件列表中.
.使您的React组件“热”.
import React from 'react'
import { hot } from 'react-hot-loader'
class Example extends React.Component {
}
export default hot(module)(Example);