Parcel v2构建后生产环境Sprite缺失路径等属性求助
解决Parcel v2构建时SVG Sprite丢失内容的问题
问题根源是SVGO的默认优化规则误删了Sprite的核心内容(symbol元素)——你的Sprite通过width="0" height="0"隐藏,SVGO会把这类隐藏元素判定为无用内容移除。以下是具体解决方法:
创建SVGO配置文件
在项目根目录新建.svgo.config.js,写入如下配置,禁用会破坏Sprite的优化规则:module.exports = { plugins: [ { name: 'preset-default', params: { overrides: { removeHiddenElems: false, // 禁止移除隐藏的SVG元素 removeUnusedNS: false, // 保留未直接引用的命名空间,避免symbol被误删 cleanupIDs: false, // 禁用ID清理,防止Sprite的symbol ID被修改导致引用失效 }, }, }, ], };重新执行构建
保存配置文件后,运行npm run build,此时dist目录里的Sprite会保留完整的symbol和路径内容,点击链接也不会出现文件缺失的错误。
原理说明:你关闭压缩后Sprite正常,是因为Parcel禁用了SVGO的优化;开启压缩时,SVGO默认的removeHiddenElems插件会把隐藏的SVG内部元素全部删掉,只留下空的<svg>标签,导致Sprite失效。通过配置SVGO禁用这些规则,就能在保留压缩的同时让Sprite正常工作。
内容的提问来源于stack exchange,提问作者Rain_lust
相关产品推荐
相关产品推荐

