Storybook 在 Next.js 项目中的完整使用指南

Storybook 在 Next.js 项目中的完整使用指南

【免费下载链接】storybook 【免费下载链接】storybook 项目地址: https://gitcode.com/gh_mirrors/sto/storybook

前言

Storybook 是一个强大的 UI 组件开发环境,它允许开发者独立构建、测试和文档化组件。对于 Next.js 项目,Storybook 提供了专门的框架支持,使得在 Next.js 环境中开发组件变得更加高效和便捷。

核心功能支持

Storybook for Next.js 提供了对 Next.js 核心功能的完整支持:

  1. 路由系统:自动模拟 Next.js 的路由功能
  2. 图片优化:支持 Next.js 的 Image 组件
  3. 绝对路径导入:与 Next.js 的路径别名兼容
  4. 样式处理:支持 CSS/Sass/Scss 模块
  5. 构建配置:自动继承 Next.js 的 Webpack 和 Babel 配置

环境要求

  • Next.js ≥ 13.5 版本
  • Storybook ≥ 7.0 版本

安装与配置

全新项目初始化

对于尚未集成 Storybook 的 Next.js 项目,执行以下命令:

npx storybook init

该命令会自动检测项目类型并配置适当的 Storybook 环境。

已有项目升级

对于已使用 Storybook 的项目,首先升级到最新版本:

npx storybook upgrade

然后安装 Next.js 框架支持:

npm install @storybook/nextjs --save-dev

更新配置文件 .storybook/main.js|ts

module.exports = {
  framework: '@storybook/nextjs',
  // 其他配置...
}

Next.js 核心功能集成

图片组件支持

Storybook 完全支持 Next.js 的 Image 组件,包括本地和远程图片:

import Image from 'next/image';

// 本地图片
import profilePic from '../public/me.png';
<Image src={profilePic} alt="Profile" />

// 远程图片
<Image src="/me.png" alt="Profile" width={500} height={500} />

字体优化

支持 next/font 的 Google 字体和本地字体:

// Google 字体
import { Inter } from 'next/font/google';
const inter = Inter({ subsets: ['latin'] });

// 本地字体
import localFont from 'next/font/local';
const myFont = localFont({ src: './fonts/my-font.woff2' });

对于本地字体,需要在 Storybook 配置中指定静态目录:

// .storybook/main.js
module.exports = {
  staticDirs: [
    {
      from: '../public/fonts',
      to: 'fonts'
    }
  ]
}

路由系统

Storybook 模拟了 Next.js 的路由功能,支持 next/routernext/navigation

// pages 目录组件
import { useRouter } from 'next/router';

// app 目录组件
import { useRouter } from 'next/navigation';

可以通过参数覆盖默认路由行为:

// 在 story 文件中
export default {
  parameters: {
    nextjs: {
      router: {
        pathname: '/custom-path',
        query: { id: '123' }
      }
    }
  }
}

Head 组件支持

next/head 组件可以直接在故事中使用:

import Head from 'next/head';

function MyComponent() {
  return (
    <>
      <Head>
        <title>My Page Title</title>
      </Head>
      {/* 组件内容 */}
    </>
  );
}

样式处理

Sass/Scss 支持

Storybook 自动继承 Next.js 的 Sass 配置:

// .storybook/preview.js
import '../styles/globals.scss';

CSS 模块

CSS 模块开箱即用:

import styles from './Button.module.css';

function Button() {
  return <button className={styles.primary}>Click me</button>;
}

最佳实践

  1. 组件隔离:确保每个故事只展示一个明确的组件状态
  2. 交互测试:利用 Storybook 的交互测试功能验证组件行为
  3. 文档化:为每个组件编写清晰的文档和使用示例
  4. 视觉测试:集成视觉回归测试确保 UI 一致性
  5. 性能考虑:对于复杂组件,考虑使用加载状态故事

常见问题解决

字体加载失败

在 CI/CD 环境中,可以模拟 Google 字体请求:

// mocked-google-fonts.js
module.exports = {
  'https://fonts.googleapis.com/css...': `
    @font-face {
      font-family: 'Inter';
      font-style: normal;
      src: url(/mock-font.woff2) format('woff2');
    }
  `
};

路由行为异常

可以通过全局配置覆盖默认路由:

// .storybook/preview.js
import { getRouter } from '@storybook/nextjs/router.mock';

export const parameters = {
  nextjs: {
    router: {
      basePath: '/app'
    }
  }
};

总结

Storybook 为 Next.js 项目提供了完整的组件开发解决方案,从图片优化到路由模拟,从样式处理到字体加载,几乎覆盖了 Next.js 的所有核心功能。通过合理配置,开发者可以在隔离环境中高效构建和测试 UI 组件,显著提升开发体验和组件质量。

【免费下载链接】storybook 【免费下载链接】storybook 项目地址: https://gitcode.com/gh_mirrors/sto/storybook

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

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

抵扣说明:

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

余额充值