使用 Vite 时 HTTP 请求卡在 Pending 状态

HTTP requests stuck in Pending state when using Vite

我有一个相当大的 Vue 3 应用程序(约 550 个组件)。 运行 vue-cli-service serve 需要两分钟,每次更改后重新构建它需要大约 20 秒。热重载很久以前就停止工作了,所以它总是需要在浏览器中刷新,即使在一个小的样式更改之后也是如此。此外,该应用程序尚未完成,明年可能会增加 2-3 倍,因此可能会更糟。

由于这些问题,我决定将其从 Vue CLI 迁移到 Vite。我已经解决了很多问题,而且该应用程序现在似乎可以与 Vite 一起使用,加载时间大大缩短。

但是,当我启动开发服务器(vite 命令)并在浏览器中打开它时,它有时会卡住。该页面不断加载,我可以在 Chrome DevTools 的“网络”选项卡中看到很多待处理的请求。 vite --debug 的输出没有什么特别之处,运行ning vite --force 也没有帮助。

出现此问题时,浏览器总是加载大量模块(~900),然后卡在 10-20 个模块上。所有这些 HTTP 请求的状态都只是 Pending,而且它们永远不会完成。浏览器和命令行都没有错误。

我认为这不是任何特定文件导致的。也许问题出在我的深层嵌套文件夹结构中,每个级别都使用 index.ts 文件进行大量重新导出。它大多卡在我自己的模块上,但我也看到过它在等待某个外部库的模块时出现的情况。

有没有人遇到过类似的问题?你是怎么解决的?

编辑: 我发现这个问题只发生在基于 Chromium 的浏览器(Google Chrome、Brave 等)上 Linux。它在 MacOS 上的 Chrome 和 Windows 以及 Linux.

上的其他浏览器(Firefox、GNOME Web 等)中没有任何问题。

感谢 this comment,我意识到这是文件描述符限制的问题。

在 Manjaro Linux(基于 Arch)上,我能够通过将以下行添加到 /etc/systemd/system.conf/etc/systemd/user.conf 文件来解决它:

DefaultLimitNOFILE=65536

修改后,Vite 在所有浏览器中都可以正常运行。