LHJ

I'm a FE developer.

gulp-svg-sprite2

05 Nov 2020 » node_module

gulp-svg-sprite2

const path = require("path");
const gulp = require("gulp");
const svgSprite = require("gulp-svg-sprite");
const glob = require("glob");

function spriteSvg () {
    return glob("./src/img/sprites-svg/*", function (er, dirs) {
        dirs.forEach(function (dir) {
            const directoryName = dir.replace(`${path.dirname(dir)}/`, "");
            let options = {
                mode: {
                    css: {
                        dest: './',
                        bust: false,
                        sprite: `./src/img/${directoryName}-svg.svg`,
                        render:  {
                            scss: {
                                template: path.join('./src/scss/vendor', 'sprite-svg-mixins.handlebars'),
                                dest: `./src/scss/vendor/_${directoryName}-svg-mixins.scss`,
                            }
                        }
                    }
                },
                shape: {
                    spacing: {
                        padding: 4
                    },
                },
                variables: {
                    spriteName: `${directoryName}`,
                    baseName  : path.posix.relative('./src/css', path.posix.join(`./src/img`, `${directoryName}-svg`)),
                    svgToPng  : ''
                }
            }

            gulp.src(`./src/img/sprites-svg/${directoryName}/*.svg`)
                .pipe(svgSprite(options))
                .pipe(gulp.dest('./'))
        })
    })
}

exports.default = spriteSvg;

1

아직 반복문으로인한 return 시점이 정확도를 해결하지 못했다. 이 문제를 해결하자.

  1. 일단은 폴더 하나만 있는걸로 가정하자.
  2. png 스프라이트는 괜찮다. 하지만 svg는 gulp-cached에서 처음 한번 걸러내지 못한다.
    스프라이트 이미지를 src로 뱉지말고 최적화까지 다 해서 dist로 내보내자.
    src 폴더로 내보내려면 gulp-cached에서 처음 못 걸래는 문제를 해결해야된다.

스프라이트 이미지들 다 dist 폴더로 내보내는걸로만 바꾸면 문제 전부 해결된다.
하지만 반복문일 때 이거 해결하는 방법 없을까… 큭…