Ladle已识别所有stories但主显示窗口完全空白问题求助
Ladle启动后识别到stories但主窗口空白排查方案
问题背景
- 项目已完成多份组件stories编写,在原有Storybook环境基础上并行安装Ladle,两款工具分工为:Ladle用于UI开发阶段快速迭代,Storybook用于交互测试及其他插件能力支撑
- 执行
npx ladle serve命令后可正常唤起浏览器,所有stories均被成功检测,但main.ladle-main节点对应的主显示窗口完全空白,无任何内容渲染 - 同一代码分支下Storybook运行完全正常,尝试以debug模式启动Ladle服务,无法从输出日志中定位有效问题线索
- 项目中绝大多数stories都配置了
play函数,暂未确认该特性是否为问题诱因 - 已将Storybook preview文件中的全局装饰器逻辑复制到
.ladle/components.tsx文件,对应配置代码如下:
import type { GlobalProvider } from "@ladle/react"; import { AppWrapper } from "../src/AppWrapper"; export const Provider: GlobalProvider = ({ children, globalState }) => ( <> <header> <link href="https://fonts.googleapis.com/css?family=Roboto:100,200,300,400,500,600,700" rel="stylesheet" /> <link href="https://fonts.googleapis.com/css?family=Roboto+Condensed:400,500,600,700" rel="stylesheet" /> </header> <AppWrapper>{children}</AppWrapper> </> );
排查步骤(按优先级从高到低)
- 先查浏览器前端控制台报错
别死磕服务端debug日志,Ladle服务端只会记录构建、服务启动类的日志,前端运行时错误根本不会打到服务端。直接按F12打开开发者工具切到Console面板,看红色报错信息就行,90%以上的白屏问题这里能直接看到明确错误栈,比如调用了不存在的API、DOM查询失败、模块加载失败这类问题,服务端日志半毛钱线索都给不出来。 - 验证
play函数兼容性问题
Ladle原生不支持Storybook的play函数配置,如果stories直接导出play字段,Ladle解析story配置时很容易触发静默运行时异常,连报错都不一定往外抛。可以临时把所有stories里的play字段注释掉,重启Ladle服务,如果页面恢复渲染,就实锤是这个问题。后续加个环境判断就行,只在Storybook环境下注入play逻辑。 - 排查全局Provider逻辑问题
你现在写的Provider里把字体<link>标签放在自定义的<header>节点里,Ladle不会把这部分内容插到文档head区域,不过这个问题只会导致字体加载不出来,不会引发白屏,不用先纠结这个。
重点查AppWrapper的逻辑:临时把<AppWrapper>包裹去掉,直接返回children,重启服务看能不能正常渲染。如果恢复了,说明AppWrapper内部依赖了Storybook专属的运行时API(比如Storybook内置的上下文hook、参数获取方法这类),这些API在Ladle环境里根本不存在,调用时会直接触发未捕获错误中断渲染,给这部分逻辑加个环境判断就行。
补个容易漏的点:如果项目里配了路径别名、按需引入这类自定义构建配置,记得同步到Ladle的配置文件里,模块解析失败也会导致白屏,不过这类问题一般控制台都会报明确的“模块找不到”错误,很好定位。
内容的提问来源于stack exchange,提问作者Jonathan Tuzman
相关产品推荐
相关产品推荐

