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

使用vite-plugin-svgr时Storybook.js出现动态导入模块错误

解决Storybook + Vite项目中SVG组件导入错误

以下是针对SVG模块导入错误的排查和修复方向:

1. 调整SVGR插件的匹配范围

当前vite-plugin-svgr的include仅设置为"*.svg",只能匹配当前目录下的SVG文件,无法覆盖@public指向的public目录下子文件夹中的文件。修改为全局匹配规则:

// vite.config.ts
svgr({
  svgrOptions: {
    plugins: ['@svgr/plugin-svgo', '@svgr/plugin-jsx'],
    svgoConfig: {
      plugins: ['preset-default', 'removeTitle', 'removeDesc', 'removeDoctype', 'cleanupIds'],
    },
  },
  include: "**/*.svg", // 修改为全局匹配所有SVG文件
}),

2. 确保Storybook继承Vite配置

Storybook 7.x基于@storybook/react-vite时,需明确指定Vite配置文件路径。在.storybook/main.ts中添加配置:

// .storybook/main.ts
import type { StorybookConfig } from "@storybook/react-vite";

const config: StorybookConfig = {
  stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"],
  addons: [
    "@storybook/addon-links",
    "@storybook/addon-essentials",
    "@storybook/addon-interactions",
  ],
  framework: {
    name: "@storybook/react-vite",
    options: {
      viteConfigPath: "../vite.config.ts", // 指定Vite配置文件路径
    },
  },
};
export default config;

3. 添加SVG的TypeScript类型声明

如果是TypeScript报错无法识别ReactComponent导出,在src/vite-env.d.ts(无则新建)中添加类型声明:

// src/vite-env.d.ts
/// <reference types="vite-plugin-svgr/client" />

也可以手动声明:

declare module "*.svg" {
  import React from "react";
  export const ReactComponent: React.FC<React.SVGProps<SVGSVGElement>>;
  const src: string;
  export default src;
}

4. 同步别名到Storybook配置

确保Storybook能解析@public别名,在.storybook/main.ts中通过viteFinal同步别名:

// .storybook/main.ts
import path from "path";

const config: StorybookConfig = {
  // ...其他已有配置
  async viteFinal(config) {
    config.resolve!.alias = {
      ...config.resolve!.alias,
      "@public": path.resolve(__dirname, "../public"),
    };
    return config;
  },
};

完成以上配置后,重启Storybook服务验证问题是否解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 10:37:36