Sas*_*sha 8 angular storybook nrwl nrwl-nx angular-storybook
我正在使用 Angular 探索 Nx(两者都比较新)并试图弄清楚如何生成一个组件库:
所以理想的设置是这样的:
repo
|--apps
|--normal-app (can import just card or button, without pulling in both)
|--libs
|--ui (lists individually exportable components, and has a servable Storybook)
|--.storybook
|--card
|--button
Run Code Online (Sandbox Code Playgroud)
遵循展示如何创建共享组件库的通用 Nx 教程以及在 Nx 中设置Storybook的指南,我生成了一个 UI 库,并设置了一个 Storybook 原理图(如果这是正确的说法)对于那个 lib 目录。
希望将我所有的共享组件放在一个库中,并将 Storybook 设置为自动生成和为每个组件提供故事——但随后能够将组件从该库单独拉入其他应用程序,而无需拉入整个庞大的用户界面图书馆。
我成功地构建了一个 UI 库和其中的两个组件。我成功地在那个库中设置了 Storybook。然后我UIModule从index.tsUI 库中的文件(公共 API)导入了,并在我的模板中使用了两个组件之一。
但是当我构建导入 lib 的应用程序时,生产构建包含两个组件,尽管我使用了一个。这是有道理的,因为我正在导入UiModule. 然而,这并不理想。
我希望创建一个安装程序,它允许在童话建立一个lib置的组件,可以导入独立。
有没有办法在不彻底改变 NX 设置的情况下做到这一点?到目前为止,我已经探索了两个主要选项。一种是将所有组件分解为自己的 UI 库,将它们全部导入为 Storybook 设置的单独应用程序,然后将它们单独导入主应用程序。像这样(尝试#1):
repo
|--apps
|--storybook-app (imports all)
|--other-app (imports just button)
|--libs
|--button
|--card
Run Code Online (Sandbox Code Playgroud)
但是,这并不理想,原因如下:
作为第二次尝试 (#2),我尝试在共享目录中将每个组件生成为单独的库:
repo
|--apps
|--storybook-app (imports all)
|--other-app (imports just button)
|--libs
|--ui (just a directory; not a "project")
|--button (module; has separate component dir beneath)
|--card
Run Code Online (Sandbox Code Playgroud)
这有其自身的许多缺点:
ui目录中,但由于这不是一个“项目”,Cannot find project 'ui'当我尝试使用 VSCode NX 扩展这样做时,我得到了一个。我可以构建上述版本之一(可能是#2),但我怀疑对于看似常见的用例有最佳实践。似乎我的大部分困惑源于 Angular 依赖注入。(在 React 应用程序中,您可以只导入一个组件,但在 Angular 中,每个组件都属于一个模块,并且特别需要注入。使用特定于组件的模块是一种不好的做法吗?)
有谁知道满足这些理想规范的惯用/最佳实践方法(具有单独导出组件的共享故事书库,或在 NX 中使用自动生成故事的拆分组件)?
我还没有找到一个完全令人满意的解决方案来解决这个问题,但这就是我最终所做的。它接近上面的#2:
libs/ui目录(不是项目)component-lib库。(而不是应用程序,因为 Storybook 有自己单独的运行命令)。.stories.ts文件libs/ui。这样,component-lib目录会在添加时自动添加每个新组件,并且每次添加组件时我都不必担心一堆样板文件。此外,每个组件都可以单独导入,无需拖入捆绑包。
我不会分享我的整个组件生成器脚本,但它是一个基本的 JS 文件,
ui运行 Nx 库生成器以在目录中生成 libfs写入适当的.stories.ts文件。然后,在我的component-lib目录中,我修改了最后一行.storybook/config.js以要求该库下的所有故事ui:
configure(require.context('../../ui', true, /\.stories\.tsx?$/), module);
Run Code Online (Sandbox Code Playgroud)
这一切都感觉有点老套,尤其是生成器脚本。但它有效!
| 归档时间: |
|
| 查看次数: |
2056 次 |
| 最近记录: |