You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
3.3 KiB
135 lines
3.3 KiB
"use strict"; |
|
|
|
// Load plugins |
|
const autoprefixer = require("gulp-autoprefixer"); |
|
const browsersync = require("browser-sync").create(); |
|
const cleanCSS = require("gulp-clean-css"); |
|
const del = require("del"); |
|
const gulp = require("gulp"); |
|
const header = require("gulp-header"); |
|
const merge = require("merge-stream"); |
|
const plumber = require("gulp-plumber"); |
|
const rename = require("gulp-rename"); |
|
const sass = require("gulp-sass"); |
|
const uglify = require("gulp-uglify"); |
|
|
|
// Load package.json for banner |
|
const pkg = require('./package.json'); |
|
|
|
// Set the banner content |
|
const banner = ['/*!\n', |
|
' * Start Bootstrap - <%= pkg.title %> v<%= pkg.version %> (<%= pkg.homepage %>)\n', |
|
' * Copyright 2013-' + (new Date()).getFullYear(), ' <%= pkg.author %>\n', |
|
' * Licensed under <%= pkg.license %> (https://github.com/BlackrockDigital/<%= pkg.name %>/blob/master/LICENSE)\n', |
|
' */\n', |
|
'\n' |
|
].join(''); |
|
|
|
// BrowserSync |
|
function browserSync(done) { |
|
browsersync.init({ |
|
server: { |
|
baseDir: "./" |
|
}, |
|
port: 3000 |
|
}); |
|
done(); |
|
} |
|
|
|
// BrowserSync reload |
|
function browserSyncReload(done) { |
|
browsersync.reload(); |
|
done(); |
|
} |
|
|
|
// Clean vendor |
|
function clean() { |
|
return del(["./vendor/"]); |
|
} |
|
|
|
// Bring third party dependencies from node_modules into vendor directory |
|
function modules() { |
|
// Bootstrap |
|
var bootstrap = gulp.src('./node_modules/bootstrap/dist/**/*') |
|
.pipe(gulp.dest('./vendor/bootstrap')); |
|
// Font Awesome |
|
var fontAwesome = gulp.src('./node_modules/@fortawesome/**/*') |
|
.pipe(gulp.dest('./vendor')); |
|
// jQuery Easing |
|
var jqueryEasing = gulp.src('./node_modules/jquery.easing/*.js') |
|
.pipe(gulp.dest('./vendor/jquery-easing')); |
|
// jQuery |
|
var jquery = gulp.src([ |
|
'./node_modules/jquery/dist/*', |
|
'!./node_modules/jquery/dist/core.js' |
|
]) |
|
.pipe(gulp.dest('./vendor/jquery')); |
|
return merge(bootstrap, fontAwesome, jquery, jqueryEasing); |
|
} |
|
|
|
// CSS task |
|
function css() { |
|
return gulp |
|
.src("./scss/**/*.scss") |
|
.pipe(plumber()) |
|
.pipe(sass({ |
|
outputStyle: "expanded", |
|
includePaths: "./node_modules", |
|
})) |
|
.on("error", sass.logError) |
|
.pipe(autoprefixer({ |
|
browsers: ['last 2 versions'], |
|
cascade: false |
|
})) |
|
.pipe(header(banner, { |
|
pkg: pkg |
|
})) |
|
.pipe(gulp.dest("./css")) |
|
.pipe(rename({ |
|
suffix: ".min" |
|
})) |
|
.pipe(cleanCSS()) |
|
.pipe(gulp.dest("./css")) |
|
.pipe(browsersync.stream()); |
|
} |
|
|
|
// JS task |
|
function js() { |
|
return gulp |
|
.src([ |
|
'./js/*.js', |
|
'!./js/*.min.js', |
|
'!./js/contact_me.js', |
|
'!./js/jqBootstrapValidation.js' |
|
]) |
|
.pipe(uglify()) |
|
.pipe(header(banner, { |
|
pkg: pkg |
|
})) |
|
.pipe(rename({ |
|
suffix: '.min' |
|
})) |
|
.pipe(gulp.dest('./js')) |
|
.pipe(browsersync.stream()); |
|
} |
|
|
|
// Watch files |
|
function watchFiles() { |
|
gulp.watch("./scss/**/*", css); |
|
gulp.watch(["./js/**/*", "!./js/**/*.min.js"], js); |
|
gulp.watch("./**/*.html", browserSyncReload); |
|
} |
|
|
|
// Define complex tasks |
|
const vendor = gulp.series(clean, modules); |
|
const build = gulp.series(vendor, gulp.parallel(css, js)); |
|
const watch = gulp.series(build, gulp.parallel(watchFiles, browserSync)); |
|
|
|
// Export tasks |
|
exports.css = css; |
|
exports.js = js; |
|
exports.clean = clean; |
|
exports.vendor = vendor; |
|
exports.build = build; |
|
exports.watch = watch; |
|
exports.default = build;
|
|
|