是否有将svgo选项传递到svgr/webpack加载程序的选项?我想删除宽度&高度属性并保留视框,默认情况下它会删除这些属性。
{
test: /.svg$/,
use: ['@svgr/webpack'],
options : {
svgo: { // Something like this ?
mergePaths: false,
removeViewbox: false,
removeAttrs: true,
}}
},
在我的案例中,我遇到了以下错误:
plugins
应该是一个数组- 每个插件对象都需要一个
name
属性
以下是对我有效的方法:
use: {
loader: '@svgr/webpack',
options: {
svgoConfig: {
plugins: [
{
name: 'removeViewBox',
active: false
}
]
}
}
}
https://react-svgr.com/docs/options/
答案是
{
loader: "@svgr/webpack",
options: {
dimensions: false
}
},
我今天遇到了这个问题,@dimitar spassov的回答似乎很有希望,但后来可能发生了变化,因为viewBox仍然被删除了。
上面提到的将选项传递给svgo仍然是正确的,正如这里所提到的。
我在这里找到了svgo的正确配置。
总而言之,对我有用的东西是这样的:
{
test: /.svg$/,
use: [
{
loader: '@svgr/webpack',
options: {
svgoConfig: {
plugins: [
{
name: 'preset-default',
params: {
overrides: {
removeViewBox: false
},
},
},
]
}
}
},
],
}
它的嵌套参数语法有点混乱。以下是我用来禁用id和类名前缀的方法。我想,在你的情况下,它会像mergePaths.active = false
,removeViewbox.active = false
。
loader: '@svgr/webpack',
options: {
svgoConfig: {
plugins: [{
prefixIds: {
prefixIds: false,
prefixClassNames: false
}
}]
}
}
我没有测试,但我想它会是这样的(或者类似的,你可以用它来获得正确的语法(:
loader: '@svgr/webpack',
options: {
svgoConfig: {
plugins: [{
removePaths: {
active: false,
}
},{
removeViewbox: {
active: false,
}
},{
removeAttrs: {
active: true,
}
}]
}
}
查看此处的代码,您可以了解实际导出的道具:https://github.com/svg/svgo
我找不到通过svgr向svgo传递参数的方法,所以我切换到了react-svg-loader
,它有关于如何实现这一点的文档:
{
test: /.svg$/,
use: [
'babel-loader',
{
loader: 'react-svg-loader',
options: {
svgo: {
plugins: [{ removeDimensions: true, removeViewBox: false }],
floatPrecision: 2,
},
},
},
],
},
按此处或此处所述工作:
{
test: /.svg$/,
use: [{
loader: '@svgr/webpack',
options: {
svgoConfig: {
plugins: [
{ mergePaths: false },
{ removeViewbox: false },
{ removeAttrs: true },
],
},
},
}],
}
如果您使用Next.js,请按照以下步骤配置SVG优化:
-
在Next.js项目的根目录中,创建一个名为
svgo.config.js
的文件,其中包含以下内容。// svgo.config.js module.exports = { plugins: [ { name: 'preset-default', params: { overrides: { removeViewBox: false, // Customize default plugin options here if needed }, }, }, ], };
-
打开您的终端并使用以下命令运行Next.js项目的开发服务器:
npm run dev
-
当您的开发服务器正在运行时,请在web浏览器中访问您的应用程序,任何SVG图像现在都应该保留其
viewBox
属性。 -
如果这个解决方案对你有帮助,可以考虑支持投票来帮助Next.js用户。