serii81
@serii81
Я люблю phр...

Почему mustache.js выдает ошибку?

Пытаюсь создать спрайт svg с помощью gulp.
Вот содержимое gulpfile.js
let svgSprite = require('gulp-svg-sprite'),
    svgmin = require('gulp-svgmin'),
    gulp = require('gulp'),
    cheerio = require('gulp-cheerio'),
    replace = require('gulp-replace');

gulp.task('svgSpriteBuild', function(){
    return gulp.src('assets/i/icons/*.svg')
    // minify svg
        .pipe(svgmin({
            js2svg: {
                pretty: true
            }
        }))
        // remove all fill, style and stroke declarations in out shapes
        .pipe(cheerio({
            run: function($){
                $('[fill]').removeAttr('fill');
                $('[stroke]').removeAttr('stroke');
                $('[style]').removeAttr('style');
            },
            parserOptions: {xmlMode: true}
        }))
        // cheerio plugin create unnecessary string '>', so replace it.
        .pipe(replace('>', '>'))
        // build svg sprite
        .pipe(svgSprite({
            mode: {
                symbol: {
                    sprite: "../sprite.svg",
                    render: {
                        scss: {
                            dest: '../../../sass/_sprite.scss',
                            template: "assets/sass/templates/_sprite_template.scss"
                        }
                    }
                }
            }
        }))
    .pipe(gulp.dest('assets/i/sprite/'));
});


Вот содержимое шаблона scss
.icon {
  display: inline-block;
  width: 1em;
  height: 1em;
  fill: currentColor;
}

{{#shapes}}
.icon-{{base}} {
  font-size:({{height.inner}}/10)*1rem;
  width:({{width.inner}}/{{height.inner}})*1em;
}


Вот ошибка при компиляции
Starting 'svgSpriteBuild'...
/var/www/test.loc/node_modules/mustache/mustache.js:226
      throw new Error('Unclosed section "' + openSection[1] + '" at ' + scanner.pos);
      ^

Error: Unclosed section "shapes" at 207
    at parseTemplate (/var/www/test.loc/node_modules/mustache/mustache.js:226:13)
    at Writer.parse (/var/www/test.loc/node_modules/mustache/mustache.js:450:34)
    at Writer.render (/var/www/test.loc/node_modules/mustache/mustache.js:465:23)
    at Object.render (/var/www/test.loc/node_modules/mustache/mustache.js:603:26)
    at /var/www/test.loc/node_modules/svg-sprite/lib/svg-sprite/mode/base.js:165:27
    at /var/www/test.loc/node_modules/async/dist/async.js:3866:24
    at replenish (/var/www/test.loc/node_modules/async/dist/async.js:998:17)
    at /var/www/test.loc/node_modules/async/dist/async.js:1002:9
    at _parallel (/var/www/test.loc/node_modules/async/dist/async.js:3865:5)
    at Object.parallelLimit$1 [as parallelLimit] (/var/www/test.loc/node_modules/async/dist/async.js:3971:5)

Process finished with exit code 1

Думаю, что для mustache.js возникают проблемы с шаблоном, я это выяснил методом тыка(закоментировал поочередно все задачи).
Вот ссылка на статью glivera-team.github.io/svg/2016/06/13/svg-sprites-...
Вот ссылка на сам проект https://github.com/seriiserii825/bugfix
Уже пол дня мучаюсь с этим спрайтом, почти что получилось, немножно осталось подножать))
Буду рад помощи.
  • Вопрос задан
  • 222 просмотра
Решения вопроса 1
rework
@rework
Помог ответ? В благодарность отметь его решением
Думаю, что ошибка возникает из-за какой-то невалидной svg или шаблона scss, в котором не закрывается тэг, проверьте ваши svg файлы из которых вы собираете спрайт.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы