1
0
mirror of https://github.com/kognise/water.css.git synced 2025-02-24 05:43:28 +01:00
css-water.css/gulpfile.js

103 lines
3.1 KiB
JavaScript
Raw Normal View History

2019-04-07 22:00:52 -04:00
const gulp = require('gulp')
const sass = require('gulp-sass')
const postcss = require('gulp-postcss')
const autoprefixer = require('autoprefixer')
const cssnano = require('cssnano')
const sourcemaps = require('gulp-sourcemaps')
2019-04-07 22:18:31 -04:00
const bytediff = require('gulp-bytediff')
2019-04-07 22:00:52 -04:00
const browserSync = require('browser-sync').create()
const chalk = require('chalk');
const rename = require('gulp-rename');
const filter = require('gulp-filter');
2019-04-07 22:00:52 -04:00
const paths = {
styles: {
src: 'src/**/*.scss',
dest: 'dist'
},
html: {
src: 'index.html'
}
}
// https://stackoverflow.com/a/20732091
function humanFileSize(size) {
var i = Math.floor( Math.log(size) / Math.log(1024) );
return ( size / Math.pow(1024, i) ).toFixed(2) * 1 + ' ' + ['B', 'kB', 'MB', 'GB', 'TB'][i];
};
2019-04-07 23:57:25 -04:00
function formatByteMessage(source, data) {
const change = (data.savings > 0 ? 'saved' : 'gained')
const prettySavings = humanFileSize(Math.abs(data.savings))
const prettyStartSize = humanFileSize(data.startSize)
let prettyEndSize = humanFileSize(data.endSize)
2019-04-07 23:57:25 -04:00
if (data.endSize > data.startSize) {
prettyEndSize = chalk.yellow(prettyEndSize)
}
2019-04-07 23:57:25 -04:00
if (data.endSize < data.startSize) {
prettyEndSize = chalk.green(prettyEndSize)
}
return `${chalk.cyan(source.padStart(12, ' '))}: ${data.fileName} ${change} ${prettySavings} (${prettyStartSize} -> ${prettyEndSize})`
}
function style() {
2019-04-07 22:00:52 -04:00
return (
gulp.src(paths.styles.src)
// Add sourcemaps
2019-04-07 22:00:52 -04:00
.pipe(sourcemaps.init())
// Create a human readable sass file
.pipe(sass({outputStyle: 'expanded'}))
// Catch any sass errors
2019-04-07 22:00:52 -04:00
.on('error', sass.logError)
// Calculate size before autoprefixing
.pipe(bytediff.start())
// autoprefix
.pipe(postcss([ autoprefixer()]))
// Write the amount gained by autoprefixing
.pipe(bytediff.stop((data) => formatByteMessage('autoprefixer', data)))
// Write the sourcemaps after making pre-minified changes
.pipe(sourcemaps.write('.'))
// Write pre-minified styles
.pipe(gulp.dest(paths.styles.dest))
// Remove sourcemaps from the pipeline, only keep css
.pipe(filter('**/*.css'))
// Calculate size before minifying
.pipe(bytediff.start())
// Minify using cssnano
.pipe(postcss([cssnano()]))
// Write the amount saved by minifying
2019-04-07 23:57:25 -04:00
.pipe(bytediff.stop((data) => formatByteMessage('cssnano', data)))
// Rename the files have the .min suffix
.pipe(rename({suffix: '.min' }))
// Write the sourcemaps after making all changes
2019-04-07 22:00:52 -04:00
.pipe(sourcemaps.write('.'))
// Write the minified files
2019-04-07 22:00:52 -04:00
.pipe(gulp.dest(paths.styles.dest))
// Stream any changes to browserSync
2019-04-07 22:00:52 -04:00
.pipe(browserSync.stream())
)
}
2019-04-07 22:00:52 -04:00
function reload() {
browserSync.reload()
2019-04-07 17:47:23 -07:00
}
function watch() {
2019-04-07 22:00:52 -04:00
style()
2019-04-07 17:47:23 -07:00
2019-04-07 22:00:52 -04:00
browserSync.init({
server: {
baseDir: './',
},
startPath: 'index.html'
})
2019-04-07 17:47:23 -07:00
2019-04-07 22:00:52 -04:00
gulp.watch(paths.styles.src, style)
gulp.watch(paths.html.src, reload)
}
2019-04-07 22:00:52 -04:00
module.exports.style = style
module.exports.watch = watch