webpack 使用不同loader 规则处理同类文件

836 阅读1分钟

场景:

一部分svg文件需要用url-loader处理,一部分svg文件需要使用@svgr/webpack + babel-loader处理成react 组件。

解决方式

module: [
	{
    	test: '\.svg$',
        oneOf: [
        	{
            	resourceQuery: /rc/,
                use: [
                    {
                      loader: 'babel-loader',
                    },
                    {
                      loader: '@svgr/webpack',
                      options: {
                        babel: false,
                        icon: true,
                      },
                    },
  				],
            },
        	{
            	use: ['url-loader'],
            }
        ],
       
    }
]

使用oneOf(当规则匹配时,只使用第一个匹配规则) 配置。resourceQuery 的值是一个正则,匹配资源路径后的query参数。

本例中 在资源后面添加自定义标识 rc 用来做特殊区分,这个标识可以根据实际情况调整,并在resourceQuery里写对应可以捕获到的规则。

使用oneOf的第一种处理规则:

import DownloadIcon from 'path/to/download.svg?rc';

使用oneOf的第二种处理规则

import DownloadIcon from 'path/to/download.svg';

参考

www.webpackjs.com/configurati… www.webpackjs.com/configurati…