You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Monorepo+React环境下Storybook加载包内stories报错求助

解决Yarn 3工作区中Storybook加载packages目录stories的Loader错误

以下是针对该问题的具体解决步骤:

1. 配置TypeScript路径映射

在根目录tsconfig.json中添加路径映射,让TypeScript和Storybook能正确解析工作区内的模块:

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@your-scope/react/*": ["packages/react/*/src"] // 替换为你的自定义前缀或包结构
    },
    // 保留原有其他配置
  },
  "include": ["src", "packages"] // 确保包含packages目录
}

2. 扩展Storybook的Webpack配置

修改.storybook/main.ts,添加webpackFinal配置,让Webpack能处理工作区包的编译:

import type { StorybookConfig } from '@storybook/react-webpack5';
import path from 'path';

const config: StorybookConfig = {
  stories: [
    '../packages/**/*.stories.@(js|jsx|ts|tsx)', // 扩展为匹配所有packages下的stories
    '../src/**/*.mdx',
    '../src/**/*.stories.@(js|jsx|ts|tsx)',
  ],
  addons: [
    '@storybook/addon-links',
    '@storybook/addon-essentials',
    '@storybook/preset-create-react-app',
    '@storybook/addon-interactions',
    '@storybook/addon-storysource',
    '@storybook/addon-mdx-gfm',
  ],
  framework: {
    name: '@storybook/react-webpack5',
    options: {},
  },
  docs: {
    autodocs: 'tag',
  },
  staticDirs: ['../public'],
  // 添加Webpack自定义配置
  webpackFinal: async (config) => {
    // 将packages目录加入模块解析路径
    config.resolve?.modules?.push(path.resolve(__dirname, '../packages'));

    // 让TypeScript loader处理packages下的文件
    config.module?.rules?.push({
      test: /\.(ts|tsx)$/,
      include: [path.resolve(__dirname, '../packages')],
      use: [
        {
          loader: 'ts-loader',
          options: {
            configFile: path.resolve(__dirname, '../tsconfig.json'),
            transpileOnly: true,
          },
        },
      ],
    });

    // 调整Create React App preset的配置,避免路径限制冲突
    const craPreset = config.addons?.find(addon => 
      typeof addon === 'object' && addon.name === '@storybook/preset-create-react-app'
    );
    if (craPreset) {
      (craPreset as any).options = {
        ...(craPreset as any).options,
        craOverrides: {
          fileLoaderExcludes: ['jsx', 'ts', 'tsx'],
        },
      };
    }

    return config;
  },
};

export default config;

3. 验证工作区依赖配置

确保每个packages下的子包都有自己的package.json,并且核心依赖(如react、typescript)在根目录或子包中正确声明,Yarn 3会自动处理工作区包的链接,无需手动执行link命令。

4. 清除缓存并重启服务

执行以下命令清除缓存,确保所有配置生效:

yarn cache clean
yarn storybook dev --no-manager-cache -p 6006

内容的提问来源于stack exchange,提问作者Lwyrn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 12:37:21