hypothetical/gulpfile.js

154 lines
4.7 KiB
JavaScript
Raw Normal View History

2016-03-30 00:51:54 -04:00
// include packages
const gulp = require("gulp"),
gUtil = require("gulp-util"),
gSass = require("gulp-sass"),
gSassGlob = require("gulp-sass-glob"),
gConcat = require("gulp-concat"),
gPlumber = require("gulp-plumber"),
gUglify = require("gulp-uglify"),
gBabel = require("gulp-babel"),
gPostCSS = require("gulp-postcss"),
gStripDebug = require("gulp-strip-debug"),
autoprefixer = require("autoprefixer");
2016-03-30 00:51:54 -04:00
// determine if gulp has been run with --production
const prod = gUtil.env.production;
2017-09-26 13:19:35 -04:00
// declare plugin settings
const sassOutputStyle = prod ? "compressed" : "nested",
sassIncludePaths = [ "bower_components" ],
2017-09-26 13:19:35 -04:00
autoprefixerSettings = { remove: false, cascade: false, browsers: [ "last 6 versions" ] };
2016-03-30 00:51:54 -04:00
// javascript files for the public site
const jsPublic = [
"resources/assets/js/site-vars.js",
"resources/assets/js/contact.js",
"resources/assets/js/subscription.js",
"resources/assets/js/app.js"
];
2016-03-30 00:51:54 -04:00
// javascript libraries for the public site
const jsPublicLibs = [
"bower_components/jquery/dist/jquery.js",
"bower_components/bootstrap-sass/assets/javascripts/bootstrap.js",
2017-11-21 18:47:31 -05:00
"node_modules/what-input/dist/what-input.js"
];
2016-03-30 00:51:54 -04:00
// javascript files for the dashboard
const jsDashboard = [
"resources/assets/js/dashboard.js"
];
2016-03-30 00:51:54 -04:00
// javascript libraries for the dashboard
const jsDashboardLibs = [
"bower_components/jquery/dist/jquery.js",
"bower_components/bootstrap-sass/assets/javascripts/bootstrap.js",
"bower_components/Sortable/Sortable.js",
"bower_components/datetimepicker/build/jquery.datetimepicker.full.js",
"bower_components/list.js/dist/list.js",
"bower_components/simplemde/dist/simplemde.min.js"
];
2016-03-30 00:51:54 -04:00
// paths to folders containing fonts that should be copied to public/fonts/
const fontPaths = [
"resources/assets/fonts/**",
"bower_components/bootstrap-sass/assets/fonts/**/*",
"bower_components/fontawesome/fonts/**"
2016-03-30 00:51:54 -04:00
];
// function to handle gulp-plumber errors
function plumberError(err) {
console.log(err);
this.emit("end");
2016-03-30 00:51:54 -04:00
}
// function to handle the processing of sass files
function processSass(filename) {
return gulp.src("resources/assets/sass/" + filename + ".scss")
2016-03-30 00:51:54 -04:00
.pipe(gPlumber(plumberError))
.pipe(gSassGlob())
.pipe(gSass({ outputStyle: sassOutputStyle, includePaths: sassIncludePaths }))
.pipe(gPostCSS([ autoprefixer(autoprefixerSettings) ]))
.pipe(gConcat(filename + ".css"))
.pipe(gulp.dest("public/css/"));
2016-03-30 00:51:54 -04:00
}
// function to handle the processing of javascript files
function processJavaScript(ouputFilename, inputFiles, es6) {
const javascript = gulp.src(inputFiles)
2016-03-30 00:51:54 -04:00
.pipe(gPlumber(plumberError))
.pipe(gConcat(ouputFilename + ".js"));
2016-03-30 00:51:54 -04:00
if (es6) { javascript.pipe(gBabel()); }
if (prod) { javascript.pipe(gStripDebug()).pipe(gUglify()); }
return javascript.pipe(gulp.dest("public/js/"));
2016-03-30 00:51:54 -04:00
}
// gulp task for public styles
gulp.task("sass-public", function() {
return processSass("app");
2016-03-30 00:51:54 -04:00
});
// gulp task for dashboard styles
gulp.task("sass-dashboard", function() {
return processSass("dashboard");
});
2016-03-30 00:51:54 -04:00
// gulp task for public javascript
gulp.task("js-public", function() {
return processJavaScript("app", jsPublic, true);
2016-03-30 00:51:54 -04:00
});
// gulp task for public javascript libraries
gulp.task("js-public-libs", function() {
return processJavaScript("lib", jsPublicLibs, false);
2016-03-30 00:51:54 -04:00
});
// gulp task for dashboard javascript
gulp.task("js-dashboard", function() {
return processJavaScript("dashboard", jsDashboard, true);
2016-03-30 00:51:54 -04:00
});
// gulp task for dashboard javascript libraries
gulp.task("js-dashboard-libs", function() {
return processJavaScript("lib-dashboard", jsDashboardLibs, false);
});
// gulp task to copy fonts
gulp.task("fonts", function() {
return gulp.src(fontPaths)
.pipe(gPlumber(plumberError))
.pipe(gulp.dest("public/fonts/"));
});
2016-03-30 00:51:54 -04:00
// gulp watch task
gulp.task("watch", function() {
const gLiveReload = require("gulp-livereload");
2016-03-30 00:51:54 -04:00
2017-08-03 19:48:25 -04:00
const liveReloadUpdate = function(files, wait) {
2016-03-30 00:51:54 -04:00
setTimeout(function() {
2017-08-03 19:48:25 -04:00
gLiveReload.changed(files);
2016-03-30 00:51:54 -04:00
}, wait || 1);
};
gLiveReload.listen();
gulp.watch(jsPublic, [ "js-public" ]).on("change", liveReloadUpdate);
gulp.watch(jsDashboard, [ "js-dashboard" ]).on("change", liveReloadUpdate);
gulp.watch([ "app/**/*.php", "routes/**/*.php", "resources/views/**/*.blade.php" ]).on("change", liveReloadUpdate);
2016-03-30 00:51:54 -04:00
2017-08-03 19:48:25 -04:00
gulp.watch("resources/assets/sass/**/*.scss", [ "sass-public", "sass-dashboard" ]).on("change", function(files) {
liveReloadUpdate(files, 1000);
2016-03-30 00:51:54 -04:00
});
});
// gulp default task
gulp.task("default", [
"sass-public",
"sass-dashboard",
"js-public",
"js-public-libs",
"js-dashboard",
"js-dashboard-libs",
"fonts"
2016-03-30 00:51:54 -04:00
]);