使用多个 Webpack 加载器将 SVG 转换为 React 组件
Using multiple Webpack loaders to transform SVGs into React components
我正在尝试将多个 Webpack 加载器组合在一起以加载我的 SVG 资产,将它们转换为内联使用,最后将结果转换为可在应用程序中使用的实际 React 组件。
const path = require('path')
module.exports = {
entry: './src/index.js',
output: {
filename: '[name].bundle.js',
path: path.resolve(__dirname, 'dist')
},
module: {
rules: [
{
test: /\.jsx?$/,
include: path.resolve(__dirname, 'src'),
use: {
loader: 'babel-loader',
options: {
presets: [
['env', {
browsers: supportedBrowsers,
modules: false
}]
]
}
}
},
{
test: /\.svg$/,
include: path.resolve(__dirname, 'src'),
use: [
{
loader: 'svg-inline-loader',
options: {
removeTags: true
}
},
{
loader: 'svg-react-loader'
}
]
}
]
}
}
如果 svg-react-loader
单独使用,加载器会按预期工作,但是很多 SVG 资产都有不需要的元素和属性,我想使用 svg-inline-loader
.
当配置如上使用时,结果将作为文本而不是可执行文件加载 JavaScript。
我正在使用以下加载程序来尝试完成此操作:
用其他loader可以吗?您可以组合 svgo-loader with svg-inline-loader
and use all the possible options provided by svgo.
如果是这样就做 npm i -D svgo-loader
并将您的 webpack 配置更改为:
{
test: /\.svg$/,
use: [
'svg-react-loader',
{
loader: 'svgo-loader',
options: {
plugins: [
{cleanupAttrs: true}
]
}
}
],
exclude: /node_modules/
}
我正在尝试将多个 Webpack 加载器组合在一起以加载我的 SVG 资产,将它们转换为内联使用,最后将结果转换为可在应用程序中使用的实际 React 组件。
const path = require('path')
module.exports = {
entry: './src/index.js',
output: {
filename: '[name].bundle.js',
path: path.resolve(__dirname, 'dist')
},
module: {
rules: [
{
test: /\.jsx?$/,
include: path.resolve(__dirname, 'src'),
use: {
loader: 'babel-loader',
options: {
presets: [
['env', {
browsers: supportedBrowsers,
modules: false
}]
]
}
}
},
{
test: /\.svg$/,
include: path.resolve(__dirname, 'src'),
use: [
{
loader: 'svg-inline-loader',
options: {
removeTags: true
}
},
{
loader: 'svg-react-loader'
}
]
}
]
}
}
如果 svg-react-loader
单独使用,加载器会按预期工作,但是很多 SVG 资产都有不需要的元素和属性,我想使用 svg-inline-loader
.
当配置如上使用时,结果将作为文本而不是可执行文件加载 JavaScript。
我正在使用以下加载程序来尝试完成此操作:
用其他loader可以吗?您可以组合 svgo-loader with svg-inline-loader
and use all the possible options provided by svgo.
如果是这样就做 npm i -D svgo-loader
并将您的 webpack 配置更改为:
{
test: /\.svg$/,
use: [
'svg-react-loader',
{
loader: 'svgo-loader',
options: {
plugins: [
{cleanupAttrs: true}
]
}
}
],
exclude: /node_modules/
}