Как создать SVG-спрайт на Laravel MIX?
Мне нужно настроить SVG спрайты на микс Laravel.
Я перепробовал несколько библиотек под webpack, result = 0
,
Может кто-нибудь посоветовать, как настроить?
Где написать код обработчика в webpack.mix.js или app.js?
1 ответ
Одним способом я смог заставить SVG-спрайты работать с Laravele Mix & svg-spritemap-webpack-plugin.
Сначала установите плагин spritemap
npm install svg-spritemap-webpack-plugin --save-dev
Затем добавьте конфиг webpack.mix.js
как это:
const mix = require('laravel-mix');
const SVGSpritemapPlugin = require('svg-spritemap-webpack-plugin');
// Set up the spritemap plugin
mix.webpackConfig({
plugins: [
new SVGSpritemapPlugin({
src:'assets/svg/icons/*.svg',
filename: '/svg/icons.svg',
prefix: '',
svg4everybody: true,
svgo: {
removeTitle: true,
removeStyleElement: true,
cleanupNumericValue: true,
},
})
]
});
// Adapt laravel-mix webpack config to better handle svg images.
Mix.listen('configReady', (webpackConfig) => {
// Add separate svg loader
webpackConfig.module.rules.push({
test: /\.(svg)$/,
include: /assets\/svg/,
loaders: [
{
loader: 'file-loader',
options: {
name: 'svg/[name].[ext]?[hash]',
publicPath: Config.resourceRoot
}
},
{
loader: 'img-loader',
options: Config.imgLoaderOptions
}
]
});
// Exclude local 'svg' folder from font loader
let fontLoaderConfig = webpackConfig.module.rules.find(rule => String(rule.test) === String(/\.(woff2?|ttf|eot|svg|otf)$/))
fontLoaderConfig.exclude = /(assets\/svg)/;
});
Благодаря этому вы сможете добавлять файлы *.svg в /resources/assets/svg/*.svg
которые копируются в открытый доступ и получают svg спрайт из /resources/assets/svg/icons/*.svg