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

Vue3项目中Storybook无法加载SVG组件问题求助

Vue3 Storybook SVG加载错误解决思路

1. 恢复适配Vue3的SVG Loader配置

别用svg-inline-loader,Vue3项目更适配vue-svg-loader,直接扩展Storybook的webpack配置:

  • 修改.storybook/main.js,调整webpack规则:
module.exports = {
  stories: ['../src/**/*.stories.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'],
  addons: ['@storybook/addon-links', '@storybook/addon-essentials', '@storybook/addon-interactions'],
  framework: '@storybook/vue3',
  webpackFinal: async (config) => {
    // 移除默认的SVG处理规则
    const fileLoaderRule = config.module.rules.find(rule => rule.test?.test('.svg'));
    fileLoaderRule.exclude = /\.svg$/;

    // 添加vue-svg-loader处理SVG为Vue组件
    config.module.rules.push({
      test: /\.svg$/,
      use: ['vue-loader', 'vue-svg-loader'],
    });

    return config;
  },
};
  • 安装依赖:npm install vue-svg-loader vue-loader --save-dev

2. 清理无用的Babel配置

之前加的@babel-preset-react完全没必要,直接删掉:

  • 执行卸载命令:npm uninstall @babel-preset-react
  • 检查项目根目录或.storybook下的Babel配置文件,只保留Vue3需要的预设:
module.exports = {
  presets: ['@vue/cli-plugin-babel/preset'],
};

3. 修复svg-inline-loader的适配问题(如果坚持用)

如果替换后出现解析错误,是因为它输出的是纯HTML字符串,Vue3无法直接识别,要调整规则并修改导入方式:

  • 调整webpack规则:
config.module.rules.push({
  test: /\.svg$/,
  loader: 'svg-inline-loader',
  options: {
    removeSVGTagAttrs: false,
  },
});
  • 组件中导入时加后缀:import MyIcon from './my-icon.svg?inline'

4. 验证框架版本兼容性

确保.storybook/main.js的framework是@storybook/vue3,而非旧版@storybook/vue,同时更新依赖到稳定版:

  • 执行更新:npm update @storybook/vue3 vue

5. 清理缓存重试

删除node_modules/.cache目录,或者执行npx storybook build --no-cache,再重新启动Storybook:npm run storybook


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 12:40:36