Сделал сборку на галпе, всё хорошо, работает:
const { src, dest, series, parallel, watch } = require('gulp');
const plumber = require('gulp-plumber');
const del = require('del');
const posthtml = require('gulp-posthtml');
const include = require('posthtml-include');
const sass = require('gulp-sass');
const rename = require('gulp-rename');
const postcss = require('gulp-postcss');
const autoprefixer = require('autoprefixer');
const csso = require('gulp-csso');
const babel = require('gulp-babel');
const uglify = require('gulp-uglify');
const browserSync = require('browser-sync').create();
function html() {
return src('./source/*.html')
.pipe(posthtml([include()]))
.pipe(dest('./dist'));
}
function css() {
return src('./source/scss/style.scss', { sourcemaps: true })
.pipe(plumber())
.pipe(sass())
.pipe(postcss([ autoprefixer() ]))
.pipe(csso())
.pipe(rename({ suffix: '.min' }))
.pipe(dest('./dist/css', { sourcemaps: true }))
.pipe(browserSync.stream());
}
function js() {
return src('./source/js/*', { sourcemaps: true })
.pipe(babel({
presets: ['@babel/env']
}))
.pipe(uglify())
.pipe(rename({ suffix: '.min' }))
.pipe(dest('./dist/js', { sourcemaps: true }));
}
function copy() {
return src([
'./source/images/*',
'./source/fonts/*'], { base: './source'})
.pipe(dest('./dist'));
}
function clean() {
return del('./dist');
}
function server() {
browserSync.init({
server: {
baseDir: './dist'
}
});
watch("./source/*.html", series(html, refreshPage));
watch("./source/scss/**/*", css);
watch("./source/js/**/*", series(js, refreshPage));
}
function refreshPage(done) {
browserSync.reload();
done();
}
function build(done) {
copy();
css();
js();
html();
done();
}
exports.default = series(clean, build, server);
exports.build = series(clean, build);
exports.clean = clean;
И есть файл index.html, в котором идёт подключение векторного спрайта из внешнего файла таким образом:
<body class="body">
<div style="display: none">
<include src="./dist/images/sprite.svg"></include>
</div>
<div class="wrapper">
<header class="page-header">
<div class="page-header__left-part">
<a class="page-header__logo logo" href="">
Файловая структура выглядит так (папка dist собирается при запуске сборки):
Но есть 2 проблемы:
- Почему-то сборка не видит файл sprite.svg в папке dist (если в html вместо ./dist/images написать .source/images, всё прекрасно работает)
- Функцию clean приходится выносить отдельно - при попытке засунуть её в функцию build сборка работает через раз.
Подскажите, пожалуйста, как этот вопрос решить.