gamutable/gulpfile.js
2021-06-18 11:26:45 +02:00

138 lines
2.9 KiB
JavaScript

const { src, dest, series, parallel, watch } = require('gulp');
const gulpSass = require('gulp-sass');
const sourcemaps = require('gulp-sourcemaps');
const postcss = require('gulp-postcss');
const autoprefixer = require('autoprefixer');
const notify = require('gulp-notify');
const concat = require('gulp-concat');
const uglify = require('gulp-uglify');
const babel = require('gulp-babel');
const rename = require('gulp-regex-rename');
// const unuse = require('postcss-uncss'); //https://github.com/uncss/postcss-uncss
/*
* SASS$
*/
function sass() {
let options_unuse = {
html: 'http://starter.spip',
};
return (
src('css/**/*.scss')
.pipe(sourcemaps.init())
.pipe(gulpSass({ outputStyle: 'expanded' }))
.on('error', (err) => notify().write(err))
.pipe(postcss([autoprefixer()])) // autoprefixer
//.pipe(postcss([autoprefixer(), cssnano()])) // autoprefixer + minifier
//.pipe(postcss([unuse(options_unuse), autoprefixer()])) // css unuse + autoprefixer
.pipe(sourcemaps.write('.')) // initialize sourcemaps first
.pipe(dest('css'))
);
}
/*
* JS -> concat + babel
*/
function jsConcatMinif() {
return src(['./js/a_compresser/*.js'])
.pipe(sourcemaps.init())
.pipe(
babel({
presets: ['@babel/preset-env'],
})
)
.pipe(concat('mon_site.min.js', { newLine: ';' }))
.pipe(uglify())
.pipe(sourcemaps.write('.'))
.pipe(dest('./js'));
}
/*
* JS -> babel
*/
function jsBabel() {
return src(['js/*.es6.js'])
.pipe(
babel({
presets: ['@babel/preset-env'],
})
)
.pipe(rename(/\.es6/, ''))
.pipe(dest('./js'));
}
/*
* Les Watchers
*/
function watcherSass() {
watch('css/**/*.scss', { ignoreInitial: false }, sass).on('change', function () {
notify('CSS -> SCSS ==> OK').write('');
});
}
function watcherJsConcatMinif() {
watch('./js/a_compresser/*.js', { ignoreInitial: false }, jsConcatMinif).on('change', function () {
notify('JS (concat) ==> OK').write('');
});
}
function watcherJsBabel() {
watch('./js/*.es6.js', { ignoreInitial: false }, jsBabel).on('change', function () {
notify('JS (babel) ==> OK').write('');
});
}
/*
* SVG sprite
*/
const gulpSvgSprite = require('gulp-svg-sprite');
const config = {
shape: {
spacing: {
box: 'icon',
},
},
mode: {
//"view": {
//"dest": ".",
//"sprite": "sprite_css_pictos.svg",
//"bust": false
//},
symbol: {
dest: '.',
sprite: 'sprite_symbol_pictos.svg',
},
},
};
function svgSprite() {
return (
src('svg/**/*.svg')
//.pipe(plumber())
.pipe(gulpSvgSprite(config))
.on('error', function (error) {
console.log(error);
})
.pipe(dest('img'))
);
}
/*
* SVG minifier
*/
var svgmin = require('gulp-svgmin');
function svgMin() {
return src('svg/*.svg').pipe(svgmin()).pipe(dest('./svgmin'));
}
/*
* Exports des fonctions
*/
module.exports = {
default: parallel(sass, jsConcatMinif, jsBabel),
sass: sass,
watch: parallel(watcherSass, watcherJsConcatMinif, watcherJsBabel),
sprite: svgSprite,
svgmin: svgMin,
};