我刚开始使用create-react-app在 React 中编码。在文档中说
如果您进行编辑,该页面将重新加载。
我不知道哪个模块负责自动重新加载(webpack 或 react-hot-reloader?),但它不起作用。我使用不同的编辑器(Sublime、VIM、..)编辑了文件,但似乎问题出在其他方面。任何建议如何调试它?
我刚开始使用create-react-app在 React 中编码。在文档中说
如果您进行编辑,该页面将重新加载。
我不知道哪个模块负责自动重新加载(webpack 或 react-hot-reloader?),但它不起作用。我使用不同的编辑器(Sublime、VIM、..)编辑了文件,但似乎问题出在其他方面。任何建议如何调试它?
经过多次搜索,我发现 Webpack watch 使用 inotify 来观察文件更改,并且在 ubuntu 中它被设置为一个较低的值。快速修复:
sudo -i
echo 1048576 > /proc/sys/fs/inotify/max_user_watches
exit
如果您想永久更改它(来自Ronald answer):
echo "fs.inotify.max_user_watches=524288" >> /etc/sysctl.conf
sudo sysctl -p
您可能还需要.env
在项目的根目录中添加一个文件,其中包含“FAST_REFRESH=false”这一行,如create react app docs中所述。
echo "FAST_REFRESH=false\n" | cat > .env
2021 年
我在反应中遇到了这个问题,^17.0.2
我通过添加.env
文件和设置来修复它FAST_REFRESH=false
。.env
只需在项目的根目录中创建一个文件并添加FAST_REFRESH=false
该文件即可。
对于 Ubuntu 用户,请在终端中运行:
sudo gedit /etc/sysctl.conf
滚动到底部并粘贴:
fs.inotify.max_user_watches=524288
保存并关闭编辑器,然后运行:
sudo sysctl -p
要检查您的成功:
cat /proc/sys/fs/inotify/max_user_watches
这应该返回 524288
通过apsrcreatix
参考:https ://github.com/flathub/com.visualstudio.code/issues/29#issuecomment-477126012
我在 Ubuntu 中遇到了同样的问题。
问题已通过删除node_modules解决,然后运行
yarn install // or npm install
实际上有解决方案可以让快速刷新工作。
使用这个补丁https://github.com/facebook/create-react-app/pull/11105/files 来自@pmmmwh
使用https://www.npmjs.com/package/patch-package来编辑你的依赖。
patch-package
(通过 npm 或 yarn 安装到您的项目中)
npm i patch-package
yarn add patch-package postinstall-postinstall
package.json
和添加postinstall
脚本
"scripts": {
+ "postinstall": "patch-package"
}
YOUR_PROJECT/node_modules/react-dev-utils/webpackHotDevClient.js
- 上面的 github 拉取请求中引入了更改npx patch-package react-dev-utils
./patches/react-dev-utils+11.0.4.patch
)或等待新版本react-dev-utils
(尚未发布,上一版本@11.0.3
不包含此更新)。
由于更新了一些包(可能是因为typescript
),我在 Create React 应用程序中的热重载中断了。我必须在不弹出 CRA 的情况下解决它。
我设法通过升级到这些软件包的 16.10 版来修复它:
"react": "^16.10.0",
"react-dom": "^16.10.0"
它工作得很好!
我的代码index.tsx
:
...
const isDev = process.env.NODE_ENV === 'development'
const rootEl = document.getElementById('root')
ReactDOM.render(<App />, rootEl)
if (isDev && module.hot) {
module.hot.accept('screens/App', () => {
ReactDOM.render(<App />, rootEl)
})
}
提示: 首先尝试这段代码(也许你设置了错误的路径)
if (module.hot) {
module.hot.accept()
}
如果这开始工作,那么您需要指定路径以使热加载更有效(更少冒泡=更短的加载)
尝试添加CHOKIDAR_USEPOLLING=true
.env 文件。
在 create-react-app 之后,我更改了我的项目名称。这是导致重新加载不起作用的原因之一。然后我再次 create-react-app,重新加载现在正在工作。