开发者问题收集

Vite Build + React 18 - 空白屏幕(空控制台日志)

2022-12-29
10176

我正在开发 Vite/React 应用。有一个 CI 流程,它运行以下命令并将 dist 包推送到 S3 存储桶。

vite build --mode production

我最近注意到我所做的提交导致应用程序“白屏”。React 未呈现“App”组件(例如在 main.tsx 中):

const container = document.getElementById('root');
const root = createRoot(container!);
root.render(
    <React.Suspense fallback={<></>}>
        <React.StrictMode>
            <ProSidebarProvider>
                <BrowserRouter>
                    <App/>
                </BrowserRouter>
                ...

查看空白页时,打开控制台日志,我看不到任何堆栈跟踪。React 开发工具清楚地看到 React 使用生产版本运行。我尝试添加错误边界,但没有成功。我不确定如何调试哪个错误导致组件无法呈现。

我能够在本地重现此问题。如果我运行上面的构建命令,然后运行以下命令:

vite preview

我可以在 localhost:4173 上看到白页。奇怪的是,如果我运行以下命令:

vite dev

我能够在 localhost:5173 上完美运行该应用程序。

来自 package.json 的依赖项

{
"react": "^18.2.0",
"vite": "^4.0.3",
"@vitejs/plugin-react": "^3.0.0",
}

我的 Vite 配置:

import {defineConfig} from "vite";
import react from '@vitejs/plugin-react'

export default ({mode}) => {
    return defineConfig({
        plugins: [
            react(),
        ],
        base: './',
        build: {
            target: 'esnext',
        },
    });
};

如果在上面的代码(来自 main.tsx)中我将

<App />

替换为

<h1>它可以工作</h1>

这在端口 4173 和 5173 上完美呈现。问题是试图找到有关为什么无法呈现 App 组件的诊断信息。

2个回答

问题是由于我错误地使用了 react-lazy-with-preload 包而导致的。

如果我在组件中加载以下延迟:

const Searchbar = lazy(() => import("../../components/Searchbar/Searchbar"));

然后我执行以下操作:

await Searchbar.preload();

这导致 Vite 构建时出现空白页。正确使用:

Searchbar.preload();
Mike Melusky
2022-12-30

如果控制台上出现任何错误,例如任何依赖项未定义,

尝试此操作:

添加:

import vue from '@vitejs/plugin-vue'
plugins: [react(), viteTsconfigPaths(), svgrPlugin(), vue()],
    resolve: {
        alias: {
            process: "process/browser",
            stream: "stream-browserify",
            zlib: "browserify-zlib",
            util: 'util',
            '@': path.resolve(__dirname, "./src")
        },
    },

将其添加到 vite.config.ts 文件中,并安装该错误消息中显示的所有依赖项。例如,如果 blob-stream 显示错误,请在 vite.config.ts 中的别名中添​​加此内容并安装 blob-stream

blobStream: "blob-stream",
Sourabh Negi
2023-05-04