我使用 create-react-app 样板创建了一个反应应用程序,这似乎很受欢迎,热重载有时会在任何文件更改时更新,有时不会,似乎有最短持续时间或类似的东西,我m 使用 Ubuntu,节点版本 7.0,package.json 中的脚本是npm:'react-script start'
我所缺少的吗?
10 回答
create-react-app
当 npm start 未检测到更改时,以下是文档链接中提供的常见故障排除步骤。
当应用程序npm start
在编辑器中运行和更新代码时,应该可能用更新的代码刷新浏览器。如果这没有发生,请尝试以下解决方法之一:
- 如果项目文件直接从 Dropbox 或 Google Drive 等云存储同步到您的本地系统,并且您尝试直接在其中运行应用程序,请尝试将其移出。
- 由于 Webpack 错误,您可能需要重新启动 watcher。如果观察者没有检测到 index.js 并且您通过文件夹名称引用它。
- Vim 和 IntelliJ 等编辑器中的安全写入功能目前破坏了观察者。您将需要禁用它。
- 由于Webpack watcher bug,路径包含括号的项目会导致问题,请尝试将项目移动到没有它们的路径。.
- 要在 Linux 和 macOS 中允许更多观察者,您可能需要调整系统设置。
- 如果项目在虚拟机中运行,例如(Vagrant 配置的)VirtualBox,
.env
如果项目目录不存在,则在项目目录中创建一个文件,然后添加CHOKIDAR_USEPOLLING=true
到其中。这可以确保下次运行npm start
时,观察者会根据需要在 VM 内使用轮询模式。 - 可以尝试增加
max_users_watches
-链接
更多参考:
试试这些:
- 在 IDE 中关闭安全写入
- 增加
max_user_watches
- 你的路径不应该有括号
作为最后的手段,尝试使用它作为你的环境变量:
CHOKIDAR_USEPOLLING=true npm start
资料来源: https ://github.com/facebookincubator/create-react-app/issues/659 https://github.com/facebookincubator/create-react-app/issues/1049#issuecomment-261731734
我能够使用以下方法完成这项工作:
sudo npm start
运行这个命令
sudo -i
echo 1048576 > /proc/sys/fs/inotify/max_user_watches
exit
在unbuntu中,我基本上杀死了端口上运行的所有进程(对于反应应用程序默认值为:3000)。
列出在端口 3000 上运行的所有进程。
lsof -i :3000
该命令将显示类似这样的内容。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 7429 yipl 19u IPv4 1081760 0t0 TCP localhost:3000->localhost:35762 (ESTABLISHED)
chrome 26448 yipl 177u IPv4 1080082 0t0 TCP localhost:35762->localhost:3000 (ESTABLISHED)
现在通过 PID 杀死进程。
kill -9 7429
kill -9 26488
再次启动您的反应应用程序。
显然,如果您退出应用程序,热模块重新加载仅适用于开箱即用。
但是,如果您还没有弹出您的应用程序,那么您可以按照这些说明使其工作。
ReactDOM.render(...)
在您的应用顶部找到,并在其下方添加以下行:
ReactDOM.render(...);
if (module.hot) {
module.hot.accept('./App', () => {
// --- Copy-paste your usual ReactDOM.render(...) call here: --- //
ReactDOM.render(...);
});
}
上面链接的说明还显示了如何热重载组件树之外的东西,例如 redux reducer。
我刚刚遇到的另一种情况是,将多个版本的 nodejs 与 NVM 并行使用。基本上,我有两个终端窗口,一个运行节点 10.x,另一个在节点 9.x 上,Webpack 观察者停止看到变化。
解决方案是将两者带到相同的节点版本
尝试删除 node_modules 文件夹并使用 cmd 重新安装npm install
为我工作(ubuntu 18.04.3 LTS)
sudo npm start
我不太了解linux,但这可能是由于防火墙设置,因为我在windows中做了同样的事情,并且在那里启动反应开发服务器我们需要通过防火墙进行访问,所以在这里我们需要做同样的事情它是管理员权限(在 ubuntu linux 发行版的情况下为 sudo)。
如果您以一堆错误启动您的应用程序,它似乎会停止查看您的文件,因此不会检测到您对损坏文件的修复。似乎您需要在没有太多/严重错误的情况下启动“启动”,文件观察程序才能工作。