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

如何阻止Webpack为CRA React项目中的SVG文件名添加哈希?

如何阻止Create React App为SVG文件添加哈希值

前置确认

先确保你所有的SVG文件名全局唯一——哪怕是不同目录下的同名文件也要重命名(比如把icons/arrow.svg和assets/arrow.svg改成icons/arrow-icon.svg和assets/arrow-asset.svg),避免构建后因文件名重复导致资源覆盖或引用错误。

实现方案(无需eject)

用react-app-rewired和customize-cra修改webpack配置,不用 eject 暴露全部配置:

  1. 安装依赖
npm install react-app-rewired customize-cra --save-dev
  1. 在项目根目录创建config-overrides.js文件,添加以下配置:
const { override, addWebpackModuleRule } = require('customize-cra');

module.exports = override(
  // 配置SVG资源处理规则,禁用哈希
  addWebpackModuleRule({
    test: /\.svg$/,
    issuer: { not: /\.(js|mjs|jsx|ts|tsx)$/ },
    type: 'asset/resource',
    generator: {
      filename: 'static/media/[name][ext]' // 只保留原文件名和后缀,不加哈希
    }
  })
);
  1. 修改package.json中的scripts命令:
"scripts": {
  "start": "react-app-rewired start",
  "build": "react-app-rewired build",
  "test": "react-app-rewired test",
  "eject": "react-scripts eject"
}

针对SVG作为组件引入的额外配置

如果项目中是把SVG作为React组件引入(比如import Logo from './logo.svg'),需要调整config-overrides.js兼容这种场景:

const { override, addWebpackModuleRule } = require('customize-cra');

module.exports = override(
  addWebpackModuleRule({
    test: /\.svg$/,
    oneOf: [
      // 处理JS/TS中引入的SVG组件
      {
        issuer: /\.(js|mjs|jsx|ts|tsx)$/,
        use: ['@svgr/webpack'],
      },
      // 处理作为静态资源的SVG
      {
        type: 'asset/resource',
        generator: {
          filename: 'static/media/[name][ext]'
        }
      }
    ]
  })
);

验证方法

执行npm run build后,查看build/static/media目录下的SVG文件,应该显示原文件名(比如logo.svg而非logo.abc123.svg)。随后启动项目测试,确认所有SVG能正常加载,无资源404或显示异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 14:42:46