问题描述
当我们将故事的默认导出和命名导出的故事定义分成两个不同的文件时,源加载器/ addon-storysource 模块无法正常工作。在插件面板中的“故事”选项卡显示为空。这个场景在v5版本中可以正常工作,但在v6版本中失败了。
重现步骤
从下面的仓库下载可复现的示例代码并运行npm run storybook
。
现在访问:http://localhost:9010/?path=/story/greeting--title-only
http://localhost:9010/?path=/story/greeting--with-message
检查“故事”选项卡,它将为空。
预期行为
尽管故事定义位于不同的文件中,但它仍应显示(在v5版本中可以正常显示,但在v6版本中不行)。此外,应突出显示故事开始和结束的行(这在v5版本中不起作用)。
截图
无
代码片段
https://github.com/vinothvk/storybookjv6-story-source-issue
系统信息:
环境信息:
系统:macOS Mojave 10.14.6
CPU:(12) x64 Intel(R) Core(TM) i7-8850H CPU @ 2.60GHz
二进制文件:
Node: 12.18.3 - ~/.nvm/versions/node/v12.18.3/bin/node
Yarn: 1.22.4 - ~/.yarn/bin/yarn
npm: 6.14.7 - ~/.nvm/versions/node/v12.18.3/bin/npm
浏览器:
Chrome: 84.0.4147.135
Firefox: 78.0.2
Safari: 13.1.2
npm包:
@storybook/addon-a11y: ~6.0.16 => 6.0.16
@storybook/addon-actions: ~6.0.16 => 6.0.16
@storybook/addon-backgrounds: ~6.0.16 => 6.0.16
@storybook/addon-console: ~1.2.1 => 1.2.1
@storybook/addon-controls: ~6.0.16 => 6.0.16
@storybook/addon-docs: ~6.0.16 => 6.0.16
@storybook/addon-events: ~6.0.16 => 6.0.16
@storybook/addon-knobs: ~6.0.16 => 6.0.16
@storybook/addon-links: ~6.0.16 => 6.0.16
@storybook/addon-storysource: ~6.0.16 => 6.0.16
@storybook/addon-toolbars: ~6.0.16 => 6.0.16
@storybook/addon-viewport: ~6.0.16 => 6.0.16
@storybook/addons: ~6.0.16 => 6.0.16
@storybook/react: ~6.0.16 => 6.0.16
@storybook/theming: ~6.0.16 => 6
8条答案
按热度按时间brjng4g31#
@shilman ,我相信你和团队正忙于处理事情。只是想知道这个问题在解决bug列表中是否有优先级/时间表?
gdrx4gfi2#
你正在从哪个版本升级?我们通常不会优先处理storysource的bug(并在寻找维护者),但source-loader目前用于addon-docs,因此这方面可以优先考虑。
zfciruhq3#
@shilman 我们从v5升级到了v6。我附上了链接,指向源代码中重现问题的代码。
分析问题后发现,似乎是在source-loader和addon-storysource之间出现的问题。如果你能优先处理它,那就太好了。
jpfvwuh44#
在这里也遇到了类似的问题。我们试图采用storysource,但是我们的一些组件需要嵌套许多子组件。例如:
Table
,它需要head、body、rows、cells和其他相关组件深度嵌套在其中。这导致每个命名导出都成为一个长组件。在一个文件中有多个这样的组件正是我们试图避免的。所以我们将它们分解成story文件夹中的多个文件。
文件夹结构:
对于
simple.stories.tsx
,我们在标签页中得到了预期的源代码。但对于complex.stories/example-a.tsx
,标签页是空白的。41zrol4v5#
你是否有修复的计划时间表/路线图?
谢谢
oxosxuxt6#
不,我们正在处理基本插件的积压问题,这是我们现在的优先事项。我很高兴审查带有修复的PR。
x6h2sr287#
经过仔细研究
src
代码并进行多次尝试,我找到了一个临时的解决方案来解决^6.3.7
的问题(尚未测试其他版本)。我的设置与上面定义的设置略有不同,但考虑到以下示例设置和步骤,我认为我们可以解决任何设置。需要更改的内容
将所有复杂的故事重命名为
*.story.tsx
在这里使用的实际上是一个自定义的webpack加载器...
storybook/addons/docs/src/frameworks/common/preset.ts
第54行至第63行在 337fdcd 中
| | constsourceLoader=sourceLoaderOptions |
| | ? [ |
| | { |
| | test: /.(stories|story).[tj]sx?$/, |
| | loader: require.resolve('@storybook/source-loader'), |
| | options: { ...sourceLoaderOptions,inspectLocalDependencies: true}, |
| | enforce: 'pre', |
| | }, |
| | ] |
| | : []; |
由于上面的
test
路径只包含*.story.*
或*.stories.*
文件,我们的complex_story.tsx
文件将被排除,因此故事源将永远找不到该文件。所以我们现在的设置是这样的...注意:你也可以另辟蹊径地覆盖默认的webpack规则,并将
test
正则表达式设置为包括你的复杂故事文件,但我觉得这样做更容易。将你的 story 文件包含在
main.stories
数组中除非文件包含在
stories
路径中,否则源将不会被发现。因此,complex_story.story.tsx
必须包含。包含
@storybook/addon-docs
出于某种原因,你也必须包含
@storybook/addon-docs
,没有这个插件,source-loader/story-source仍然无法找到要使用的正确导出作为源。这必须包含一些逻辑来连接导出与其原始文件。如果你像我一样不使用文档选项卡,你可以像这样轻松地隐藏它...
注意事项
complex_story.story.tsx
文件中使用export default
否则它们将被视为故事并需要正确的title
等,并且很可能是重复的故事。import
和其他除特定导出之外的内容都将被排除。结论
我不认为这是一个解决问题的方法,因为它需要非显而易见的实现来修复。此外,先前版本(
^5.x.x
)的功能允许完整文件可见,而不仅仅是导出的内容包括。查看 nickofthyme@d7429cf 以查看工作演示,只需运行
yarn bootstrap --core && yarn start
即可在本地运行。g9icjywg8#
跟进我注意到在一些故事中存在一个类似于#12208的问题。