ng-bootstrap组件文档自动化:使用Storybook展示组件

ng-bootstrap组件文档自动化:使用Storybook展示组件

【免费下载链接】ng-bootstrap Angular powered Bootstrap 【免费下载链接】ng-bootstrap 项目地址: https://gitcode.com/gh_mirrors/ng/ng-bootstrap

项目概述

ng-bootstrap是基于Angular和Bootstrap CSS构建的组件库,提供了丰富的UI组件,如日期选择器(Datepicker)、模态框(Modal)、下拉菜单(Dropdown)等。项目采用模块化架构,各组件独立开发并维护,通过Angular CLI进行构建和测试。官方文档和演示站点由demo/目录提供支持,用户可通过DEVELOPER.md了解本地开发环境搭建流程。

组件结构与文档现状

核心组件模块

ng-bootstrap的组件源代码集中在src/目录下,每个组件拥有独立的子目录,例如:

现有文档系统

项目当前通过以下方式展示组件:

  1. 演示站点: 运行yarn demo启动本地服务器,访问http://localhost:4200查看组件示例
  2. API文档: 由misc/generate-docs.ts自动生成,提取src/目录中的代码注释
  3. 开发指南: DEVELOPER.md提供本地构建和测试流程

Storybook集成方案

环境准备

  1. 安装Storybook
    在项目根目录执行以下命令:

    npx storybook@latest init --type angular
    

    该命令会自动检测Angular项目结构,安装依赖并生成配置文件。

  2. 配置TypeScript路径
    修改.storybook/main.ts,添加组件路径映射:

    module.exports = {
      stories: ['../src/**/*.stories.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'],
      addons: ['@storybook/addon-links', '@storybook/addon-essentials'],
      framework: {
        name: '@storybook/angular',
        options: {}
      },
      typescript: {
        check: true,
        checkOptions: {},
        reactDocgen: 'react-docgen-typescript',
        reactDocgenTypescriptOptions: {
          shouldExtractLiteralValuesFromEnum: true,
          propFilter: (prop) => (prop.parent ? !/node_modules/.test(prop.parent.fileName) : true),
        },
      },
    };
    

编写组件Story

日期选择器(Datepicker) 为例,创建src/datepicker/datepicker.stories.ts:

import { componentWrapperDecorator, moduleMetadata } from '@storybook/angular';
import { NgbDatepickerModule } from './datepicker.module';
import { NgbDateStruct } from './ngb-date-struct';
import { Component } from '@angular/core';

@Component({
  template: `
    <div class="container p-3">
      <ngb-datepicker [(ngModel)]="model"></ngb-datepicker>
      <hr>
      <pre>Model: {{ model | json }}</pre>
    </div>
  `
})
class DatepickerDemoComponent {
  model: NgbDateStruct | null = { year: 2025, month: 10, day: 29 };
}

export default {
  title: 'Components/Datepicker',
  component: DatepickerDemoComponent,
  decorators: [
    moduleMetadata({
      imports: [NgbDatepickerModule],
    }),
    componentWrapperDecorator((story) => `<div class="p-4">${story}</div>`),
  ],
};

export const Basic = {};
export const Disabled = {
  parameters: {
    docs: {
      description: {
        story: '禁用状态的日期选择器'
      }
    }
  },
  render: () => ({
    template: `
      <div class="container p-3">
        <ngb-datepicker [(ngModel)]="model" [disabled]="true"></ngb-datepicker>
      </div>
    `,
    props: {
      model: { year: 2025, month: 10, day: 29 }
    }
  })
};

添加文档插件

安装Storybook文档插件以支持自动API生成:

yarn add -D @storybook/addon-docs

.storybook/main.ts中注册插件:

addons: [
  '@storybook/addon-links',
  '@storybook/addon-essentials',
  '@storybook/addon-docs'  // 添加文档插件
]

自动化文档生成

集成现有文档工具

利用项目内置的misc/generate-docs.ts提取组件注释,通过自定义脚本转换为Storybook支持的MDX格式:

// scripts/convert-docs-to-mdx.ts
import { generateApiDocs } from '../misc/generate-docs';
import fs from 'fs';
import path from 'path';

const docs = generateApiDocs();
Object.entries(docs).forEach(([component, doc]) => {
  const mdxContent = `
import { Meta } from '@storybook/addon-docs';

<Meta title="API/${component}" />

# ${component} API

${doc}
  `;
  fs.writeFileSync(
    path.join(__dirname, `../src/${component}/${component}.api.mdx`),
    mdxContent.trim()
  );
});

package.json中添加脚本:

"scripts": {
  "docs:generate": "ts-node scripts/convert-docs-to-mdx.ts",
  "storybook:build": "yarn docs:generate && build-storybook"
}

视觉测试集成

结合Playwright进行组件视觉测试,创建src/datepicker/datepicker.stories.e2e.ts:

import { test, expect } from '@playwright/test';

test.describe('Datepicker Stories', () => {
  test('Basic story renders correctly', async ({ page }) => {
    await page.goto('http://localhost:6006/?path=/story/components-datepicker--basic');
    await expect(page.locator('ngb-datepicker')).toHaveScreenshot('datepicker-basic.png');
  });
});

部署与维护

本地开发流程

  1. 启动Storybook

    yarn storybook
    

    访问http://localhost:6006查看组件文档

  2. 构建静态站点

    yarn storybook:build
    

    输出文件位于storybook-static目录,可部署至GitHub Pages或企业内部服务器。

持续集成配置

修改.github/workflows/ci.yml,添加Storybook构建步骤:

jobs:
  storybook:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: 'yarn'
      - run: yarn install --frozen-lockfile
      - run: yarn storybook:build
      - name: Upload artifact
        uses: actions/upload-artifact@v4
        with:
          name: storybook
          path: storybook-static

项目资源导航

通过Storybook集成,ng-bootstrap实现了组件开发与文档维护的无缝衔接,开发人员可在同一环境中迭代组件功能与使用示例,提升团队协作效率。

【免费下载链接】ng-bootstrap Angular powered Bootstrap 【免费下载链接】ng-bootstrap 项目地址: https://gitcode.com/gh_mirrors/ng/ng-bootstrap

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值