Доброй ночи.
Накопал когда то gulpfile для front-end сборки. Со временем он рос и преобразовывался под мои нужды, дополнялся....
В итоге я заимел такую вот простыню:
'use strict';
var gulp = require('gulp'),
watch = require('gulp-watch'),
prefixer = require('gulp-autoprefixer'),
uglify = require('gulp-uglify'),
sass = require('gulp-sass'),
sourcemaps = require('gulp-sourcemaps'),
rigger = require('gulp-rigger'),
cssmin = require('gulp-clean-css'),
concat = require('gulp-concat'),
imagemin = require('gulp-imagemin'),
pngquant = require('imagemin-pngquant'),
sprite = require('gulp.spritesmith'),
rimraf = require('rimraf'),
browserSync = require("browser-sync"),
jade = require('gulp-jade'),
plumber = require('gulp-plumber'),
reload = browserSync.reload;
var path = {
build: { //Тут мы укажем куда складывать готовые после сборки файлы
html: 'build/',
js: 'build/js/',
css: 'build/styles/',
img: 'build/images/',
fonts: 'build/fonts/'
},
src: { //Пути откуда брать исходники
html: 'src/*.jade',
js: [
'src/js/*.js'
],
style: [
'bower_components/normalize-css/normalize.css',
'src/style/**/*.scss',
'src/style/**/*.css'
],
img: 'src/img/*.*',
fonts: 'src/fonts/**/*.*'
},
watch: { //Тут мы укажем, за изменением каких файлов мы хотим наблюдать
html: 'src/**/*.jade',
js: 'src/js/**/*.js',
style: 'src/style/**/**/*.*',
img: 'src/img/**/*.*',
fonts: 'src/fonts/**/*.*'
},
clean: './build'
};
var config = {
server: {
baseDir: "./build"
},
tunnel: true,
host: 'localhost',
port: 9000,
logPrefix: "Front-End"
};
gulp.task('html:build', function () {
gulp.src(path.src.html) //Выберем файлы по нужному пути
.pipe(plumber())
.pipe(jade()) //Прогоним через rigger
.pipe(gulp.dest(path.build.html)) //Выплюнем их в папку build
.pipe(reload({stream: true})); //И перезагрузим наш сервер для обновлений
});
gulp.task('js:build', function () {
gulp.src(path.src.js) //Найдем наш main файл
.pipe(plumber())
.pipe(rigger()) //Прогоним через rigger
.pipe(concat('main.js'))
.pipe(sourcemaps.init()) //Инициализируем sourcemap
.pipe(gulp.dest("temp/"))
.pipe(uglify()) //Сожмем наш js
.pipe(sourcemaps.write()) //Пропишем карты
.pipe(gulp.dest(path.build.js)) //Выплюнем готовый файл в build
.pipe(reload({stream: true})); //И перезагрузим сервер
});
gulp.task('style:build', function () {
gulp.src(path.src.style) //Выберем наш main.scss
.pipe(plumber())
.pipe(sourcemaps.init()) //То же самое что и с js
.pipe(concat("main.scss"))
.pipe(prefixer()) //Добавим вендорные префиксы
.pipe(gulp.dest("temp/")) // сохраняем полученный файл в нужной директории
.pipe(sass('temp/main.scss'))
.pipe(cssmin()) //Сожмем
.pipe(sourcemaps.write())
.pipe(gulp.dest(path.build.css)) //И в build
.pipe(reload({stream: true}));
});
gulp.task('image:build', function () {
gulp.src(path.src.img) //Выберем наши картинки
.pipe(imagemin({ //Сожмем их
progressive: true,
svgoPlugins: [{removeViewBox: false}],
use: [pngquant()],
interlaced: true
}))
.pipe(gulp.dest(path.build.img)) //И бросим в build
.pipe(reload({stream: true}));
});
gulp.task('fonts:build', function() {
gulp.src(path.src.fonts)
.pipe(gulp.dest(path.build.fonts))
});
gulp.task('build', [
'html:build',
'js:build',
'style:build'
]);
gulp.task('pre-build', [
'fonts:build',
'sprite',
'image:build'
]);
gulp.task('watch', function(){
watch([path.watch.html], function(event, cb) {
gulp.start('html:build');
});
watch([path.watch.style], function(event, cb) {
gulp.start('style:build');
});
watch([path.watch.js], function(event, cb) {
gulp.start('js:build');
});
watch([path.watch.img], function(event, cb) {
gulp.start('image:build');
});
watch([path.watch.fonts], function(event, cb) {
gulp.start('fonts:build');
});
});
gulp.task('webserver', function () {
browserSync(config);
});
gulp.task('clean', function (cb) {
rimraf(path.clean, cb);
});
gulp.task('sprite', function() {
var spriteData =
gulp.src('./src/img/sprite/*.*') // путь, откуда берем картинки для спрайта
.pipe(sprite({
imgName: 'sprite.png',
cssName: '5_sprite.css',
}));
spriteData.img.pipe(gulp.dest('./src/img/')); // путь, куда сохраняем картинку
spriteData.css.pipe(gulp.dest('./src/style/1_main-styles')); // путь, куда сохраняем стили
});
gulp.task('default', ['build', 'webserver', 'watch']);
Сейчас при старте нового проекта пишу:
npm i и долго жду попутно рассматривая красивые предупреждения в консоли о разных пакетах, которые я использую - что то устарело и пр.
Где то на днях видел на тостере мимолетом о том что сейчас юзают gulp 4, что есть там какие то плюшки ускоряющие сборку, а еще сборщик теперь не в одном gulpfile, а красиво разбит на несколько файлов и собирать можно для разработки(там картинки не жмутся и еще что то не жмется в отличии от продакшена) и отдельно сборка на продакшн(жмет все по максимуму), но найти не смог потом я этого на тостере, да и не нагуглил ничего толком кроме скринкаста от Ильи Кантора.
Подскажите что почитать/где посмотреть что бы переписать/написать по новой gulpfile с учетом новых возможностей gulp не растеряв старых добрых удобных тасков своих. А может кто заготовку покажет толковую?