Gulp-imagemin минимизирует файл SVG до 0 КБ

У меня есть один файл SVG, содержащий несколько тегов <symbol>, представляющих значки. Выглядит это примерно так:

<svg xmlns = "http://www.w3.org/2000/svg" style = "display: none;">
  <symbol id = "icon-arrow_carrot_up_alt" viewBox = "0 0 0 0">
    <path d = "M544 1024c265.088 0 480-214.912 480-480s-214.912-480-480-480-480 214.912-480 480 214.912 480 480 480zM313.728 601.152l207.552-207.552c6.272-6.272 14.464-9.344 22.72-9.344s16.448 3.072 22.72 9.344l207.552 207.552c12.48 12.48 12.48 32.768 0 45.248s-32.768 12.48-45.248 0l-185.024-185.024-185.024 185.024c-12.48 12.48-32.768 12.48-45.248 0s-12.48-32.768 0-45.248z" fill = "none"></path>
  </symbol>
  <symbol id = "icon-arrow_carrot-2down" viewBox = "0 0 0 0">
    <path d = "M702.592 523.648l-191.744 169.6-191.744-169.6c-12.544-12.544-32.96-12.544-45.504 0s-12.544 32.96 0 45.504l214.080 189.376c6.4 6.4 14.784 9.472 23.168 9.344 8.384 0.128 16.768-2.88 23.168-9.28l214.080-189.376c12.544-12.544 12.544-32.96 0-45.504s-32.96-12.608-45.504-0.064zM748.096 294.144c-12.544-12.544-32.96-12.544-45.504 0l-191.744 169.6-191.744-169.6c-12.608-12.544-33.024-12.544-45.568 0s-12.544 32.96 0 45.504l214.080 189.376c6.4 6.4 14.784 9.472 23.168 9.344 8.384 0.128 16.832-2.944 23.168-9.344l214.080-189.376c12.672-12.544 12.672-32.896 0.064-45.504z" fill = "none"></path>
  </symbol>
  ...
</svg>

Я запускаю этот файл через задачу gulp imagemin следующим образом:

var gulp = require('gulp');
var changed = require('gulp-changed');
var imagemin = require('gulp-imagemin');

gulp.task('optimize-images', function() {
    return gulp.src(paths.img.src + '/**/*')
        .pipe(changed(paths.img.dest))
        .pipe(imagemin([
            imagemin.svgo({
                plugins: [
                    {removeViewBox: true},
                    {cleanupIDs: false}
                ]
            })
        ]))
        .pipe(gulp.dest(paths.img.dest));
});

Файл минифицируется и помещается в правильный каталог назначения, однако в нем говорится, что он оптимизировал 100% файла, и его размер уменьшается до 0 КБ без содержимого файла. SVG полностью удален из файла.

Почему все содержимое этого файла SVG уничтожается и как это исправить?

Создание фильтров для вашего сайта
Создание фильтров для вашего сайта
Фильтры - удобный инструмент в арсенале веб-дизайнера. Они позволяют изменять элементы на странице с помощью всего нескольких строк кода. Эти...
Анимация SVG-узоров без единой строки CSS
Анимация SVG-узоров без единой строки CSS
Недавно я работал над веб-проектом, который позволил мне поэкспериментировать с шаблонами SVG. С SVG очень приятно работать, как только вы получите...
Как использовать d3.js для рисования 2D SVG-элементов в приложении Angular?
Как использовать d3.js для рисования 2D SVG-элементов в приложении Angular?
D3.js - это обширная библиотека, используемая для привязки произвольных данных к объектной модели документа (DOM). Мы разберем основные варианты...
1
0
200
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Lol woops, я нашел Эта проблема на странице плагина svgo/svgo, который использует gulp-imagemin. Было отмечено, что:

<symbol> is considered empty by itself, because it's not rendered. That's why it's being removed by default. You need to turn off removeUselessDefs as suggested above.

Поэтому я добавил к своей задаче следующие параметры:

plugins: [
    {cleanupIDs: false},
    {removeUselessDefs: false},
    {removeViewBox: true},
]

Он все еще не работал, затем я понял, что style = "display: none;" был на теге <svg>, что означает, что он не отображается. SVG автоматически создается пакетом gulp-icomoon-builder, что объясняет его. Этот пакет предлагает возможность указать настраиваемый внешний шаблон для создания файла, поэтому я создам его без встроенного стиля отображения.

Так что отказ от стиля display: none; исправил это.

Другие вопросы по теме