【发布时间】:2019-09-12 18:59:27
【问题描述】:
我一直在尝试将流星框架 Vulcan.js 与 Storybook 集成。困难来自构建系统的差异。目前,我们可以使用 Webpack 在 Storybook 中加载一些特定的 Meteor 包。
所以,现在我们需要模仿 Storybook 中的一些额外 Meteor 功能。我们依靠 Meteor.startup() 回调来初始化特定的 React 组件,该组件是其他组件的注册表。但是我在 Storybook 中找不到任何等效的模式。
Meteor.startup()注册的回调的特征如下:
- 它正在运行
after应用程序正在构建。所以不可能只写一个“启动”文件并导入,因为它会运行得太快,注册表仍然是空的 - 它运行
before故事实际上被渲染或加载。基本上Meteor.startup回调保证是第一个运行的函数。所以在装饰器中调用相关函数可能为时已晚。 - 它只被调用一次。这不是一个很强的要求,因为我们可以通过将回调编写为纯函数来绕过它,但最好避免多次调用。
我试过写一个插件,但它不起作用,因为插件有自己的构建系统。因此他们无法访问我们的 Meteor 包,但他们需要它们才能正常工作。
我试过写一个装饰器。这是一个不错的解决方案,但我有奇怪的行为,因为它在每个组件安装上运行启动功能(这是在导入之后但在渲染之前运行它们的唯一方法)。这是我目前最好的选择,但似乎并不理想。
最后一个解决方案是在相关故事的顶部运行代码。它可以工作,但容易出错并影响开发者体验
那么,问题来了:您将如何在 Storybook 中定义回调,以便它在启动期间运行,就像 Meteor.startup 回调一样?
【问题讨论】:
标签: javascript reactjs meteor webpack storybook