Webpack2 - 如何内联 SVG 文件
Webpack2 - How to inline an SVG file
在 webpack.config.js
中,我使用以下 loader
:
{
test: /\.svg$/,
use: [ 'file-loader' ]
}
然后在我的 component
:
import icon from '../img/icons/menu.svg'
然而,console.log(icon) // 58f714c05099311f302aeb7d346be056.svg
显示icon
的值只是一个文件名。
有没有办法导入原始文件 svg
?
更新:
使用 url-loader
将 svg
作为 base64 字符串导入。
<img src="data:image/svg+xml;base64,PHN2ZyBjbGFzcz0ibWVudS1pY29uIiB3aWR0aD0iMzBweCIgaGVpZ2h0PSIzMHB4IiB2aWV3Qm94PSIwIDAgMzAgMzAiIHhtbDpzcGFjZT0icHJlc2VydmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxwYXRoIGQ9Ik00LDEwaDI0YzEuMTA0LDAsMi0wLjg5NiwyLTJzLTAuODk2LTItMi0ySDRDMi44OTYsNiwyLDYuODk2LDIsOFMyLjg5NiwxMCw0LDEweiBNMjgsMTRINGMtMS4xMDQsMC0yLDAuODk2LTIsMiAgczAuODk2LDIsMiwyaDI0YzEuMTA0LDAsMi0wLjg5NiwyLTJTMjkuMTA0LDE0LDI4LDE0eiBNMjgsMjJINGMtMS4xMDQsMC0yLDAuODk2LTIsMnMwLjg5NiwyLDIsMmgyNGMxLjEwNCwwLDItMC44OTYsMi0yIFMyOS4xMDQsMjIsMjgsMjJ6Ii8+PC9zdmc+Cg==">
但是,这也不理想,因为我无法使用 CSS
设置 svg
的样式。
module.loaders = ...
{
test: /\.(svg)$/,
loader: 'raw-loader'
}
这是因为您有内联 svg。
Ref
您可以通过插件使用 svg 作为背景图片 https://github.com/kisenka/svg-fill-loader:
background-image: url('./styles/images/shark.svg?fill=$ddd');
background-size: cover;
width: 330px;
height: 250px;
使用 background-size: cover;
svg 会拉伸整个容器,因此您可以调整大小,使用 fill
您可以更改 svg 的颜色。
在 webpack.config.js
中,我使用以下 loader
:
{
test: /\.svg$/,
use: [ 'file-loader' ]
}
然后在我的 component
:
import icon from '../img/icons/menu.svg'
然而,console.log(icon) // 58f714c05099311f302aeb7d346be056.svg
显示icon
的值只是一个文件名。
有没有办法导入原始文件 svg
?
更新:
使用 url-loader
将 svg
作为 base64 字符串导入。
<img src="data:image/svg+xml;base64,PHN2ZyBjbGFzcz0ibWVudS1pY29uIiB3aWR0aD0iMzBweCIgaGVpZ2h0PSIzMHB4IiB2aWV3Qm94PSIwIDAgMzAgMzAiIHhtbDpzcGFjZT0icHJlc2VydmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxwYXRoIGQ9Ik00LDEwaDI0YzEuMTA0LDAsMi0wLjg5NiwyLTJzLTAuODk2LTItMi0ySDRDMi44OTYsNiwyLDYuODk2LDIsOFMyLjg5NiwxMCw0LDEweiBNMjgsMTRINGMtMS4xMDQsMC0yLDAuODk2LTIsMiAgczAuODk2LDIsMiwyaDI0YzEuMTA0LDAsMi0wLjg5NiwyLTJTMjkuMTA0LDE0LDI4LDE0eiBNMjgsMjJINGMtMS4xMDQsMC0yLDAuODk2LTIsMnMwLjg5NiwyLDIsMmgyNGMxLjEwNCwwLDItMC44OTYsMi0yIFMyOS4xMDQsMjIsMjgsMjJ6Ii8+PC9zdmc+Cg==">
但是,这也不理想,因为我无法使用 CSS
设置 svg
的样式。
module.loaders = ...
{
test: /\.(svg)$/,
loader: 'raw-loader'
}
这是因为您有内联 svg。 Ref
您可以通过插件使用 svg 作为背景图片 https://github.com/kisenka/svg-fill-loader:
background-image: url('./styles/images/shark.svg?fill=$ddd');
background-size: cover;
width: 330px;
height: 250px;
使用 background-size: cover;
svg 会拉伸整个容器,因此您可以调整大小,使用 fill
您可以更改 svg 的颜色。