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

在Storybook中使用vite-plugin-dynamic-import插件报错的解决方法

解决Vite+React+TypeScript项目中Storybook与vite-plugin-dynamic-import兼容问题

问题概述

使用Vite构建React+TypeScript项目,借助vite-plugin-dynamic-import处理动态导入时,npm run dev和npm run build可正常运行,但npm run storybook或npm run build-storybook出现vite:build-import-analysis解析错误。

解决方案

1. 让Storybook正确加载项目Vite配置

修改.storybook/main.ts,引入项目的vite.config.ts并合并配置,确保vite-plugin-dynamic-import被Storybook的Vite构建流程正确加载:

import type { StorybookConfig } from "@storybook/react-vite";
import { mergeConfig } from 'vite';
import viteConfig from '../vite.config';

const config: StorybookConfig = {
  stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"],
  addons: [
    "@storybook/addon-links",
    "@storybook/addon-essentials",
    "@storybook/addon-onboarding",
    "@storybook/addon-interactions",
  ],
  core: {
    builder: '@storybook/builder-vite',
  },
  framework: {
    name: "@storybook/react-vite",
    options: {
      viteConfig: async () => mergeConfig(viteConfig, {}),
    },
  },
  docs: {
    autodocs: "tag",
  },
};
export default config;

2. 限制vite-plugin-dynamic-import的处理范围

避免插件处理Storybook内部文件或故事文件导致解析错误,修改vite.config.ts:

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import dynamicImport from 'vite-plugin-dynamic-import'

export default defineConfig({
  plugins: [
    react(),
    dynamicImport({
      // 仅处理src目录下的业务代码
      include: 'src/**/*',
      // 排除Storybook相关文件
      exclude: [/\.stories\.(ts|tsx)$/, /\.storybook\//]
    }),
  ],
})

3. 检查并升级依赖版本

可能存在版本兼容问题,执行以下命令更新依赖:

  • 更新vite-plugin-dynamic-import:npm update vite-plugin-dynamic-import
  • 更新Storybook相关包:npm update @storybook/react-vite @storybook/builder-vite

4. 按需禁用插件(调试用)

如果以上方法无效,可临时在Storybook环境中禁用vite-plugin-dynamic-import,确认问题来源:

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import dynamicImport from 'vite-plugin-dynamic-import'

export default defineConfig(({ mode }) => {
  const plugins = [react()]
  // 非Storybook环境才加载动态导入插件
  if (!mode.includes('storybook')) {
    plugins.push(dynamicImport())
  }
  return { plugins }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 15:42:51