Skip to content

Instantly share code, notes, and snippets.

@ilunie
Last active July 1, 2017 02:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ilunie/3e6d4c7c06693df2a7f5 to your computer and use it in GitHub Desktop.
Save ilunie/3e6d4c7c06693df2a7f5 to your computer and use it in GitHub Desktop.
/**
* Gulp Packages
* https://github.com/cferdinandi/gulp-boilerplate/blob/master/gulpfile.js#L94
*/
// General
var gulp = require('gulp');
var fs = require('fs');
var del = require('del');
var lazypipe = require('lazypipe');
var plumber = require('gulp-plumber');
var flatten = require('gulp-flatten');
var tap = require('gulp-tap');
var rename = require('gulp-rename');
var header = require('gulp-header');
var footer = require('gulp-footer');
var watch = require('gulp-watch');
var livereload = require('gulp-livereload');
var package = require('./package.json');
// Scripts and tests
var jshint = require('gulp-jshint');
var stylish = require('jshint-stylish');
var concat = require('gulp-concat');
var uglify = require('gulp-uglify');
var optimizejs = require('gulp-optimize-js');
// Docs
var markdown = require('gulp-markdown');
var fileinclude = require('gulp-file-include');
/**
* Paths to project folders
*/
var paths = {
input: 'src/**/*',
output: 'dist/',
scripts: {
input: 'src/js/*',
output: 'dist/js/'
},
docs: {
input: 'src/docs/*.{html,md,markdown}',
output: 'docs/',
templates: 'src/docs/_templates/',
assets: 'src/docs/assets/**'
}
};
/**
* Template for banner to add to file headers
*/
var banner = {
full :
'/*!\n' +
' * <%= package.name %> v<%= package.version %>: <%= package.description %>\n' +
' * (c) ' + new Date().getFullYear() + ' <%= package.author.name %>\n' +
' * <%= package.license %> License\n' +
' * <%= package.repository.url %>\n' +
' */\n\n',
min :
'/*!' +
' <%= package.name %> v<%= package.version %>' +
' | (c) ' + new Date().getFullYear() + ' <%= package.author.name %>' +
' | <%= package.license %> License' +
' | <%= package.repository.url %>' +
' */\n'
};
/**
* Gulp Taks
*/
// Lint, minify, and concatenate scripts
gulp.task('build:scripts', ['clean:dist'], function() {
var jsTasks = lazypipe()
.pipe(header, banner.full, { package : package })
.pipe(optimizejs)
.pipe(gulp.dest, paths.scripts.output)
.pipe(rename, { suffix: '.min' })
.pipe(uglify)
.pipe(optimizejs)
.pipe(header, banner.min, { package : package })
.pipe(gulp.dest, paths.scripts.output);
return gulp.src(paths.scripts.input)
.pipe(plumber())
.pipe(tap(function (file, t) {
if ( file.isDirectory() ) {
var name = file.relative + '.js';
return gulp.src(file.path + '/*.js')
.pipe(concat(name))
.pipe(jsTasks());
}
}))
.pipe(jsTasks());
});
// Lint scripts
gulp.task('lint:scripts', function () {
return gulp.src(paths.scripts.input)
.pipe(plumber())
.pipe(jshint())
.pipe(jshint.reporter('jshint-stylish'));
});
// Remove pre-existing content from output folders
gulp.task('clean:dist', function () {
del.sync([
paths.output
]);
});
// Generate documentation
gulp.task('build:docs', ['compile', 'clean:docs'], function() {
return gulp.src(paths.docs.input)
.pipe(plumber())
.pipe(fileinclude({
prefix: '@@',
basepath: '@file'
}))
.pipe(tap(function (file, t) {
if ( /\.md|\.markdown/.test(file.path) ) {
return t.through(markdown);
}
}))
.pipe(header(fs.readFileSync(paths.docs.templates + '/_header.html', 'utf8')))
.pipe(footer(fs.readFileSync(paths.docs.templates + '/_footer.html', 'utf8')))
.pipe(gulp.dest(paths.docs.output));
});
// Copy distribution files to docs
gulp.task('copy:dist', ['compile', 'clean:docs'], function() {
return gulp.src(paths.output + '/**')
.pipe(plumber())
.pipe(gulp.dest(paths.docs.output + '/dist'));
});
// Copy documentation assets to docs
gulp.task('copy:assets', ['clean:docs'], function() {
return gulp.src(paths.docs.assets)
.pipe(plumber())
.pipe(gulp.dest(paths.docs.output + '/assets'));
});
// Remove prexisting content from docs folder
gulp.task('clean:docs', function () {
return del.sync(paths.docs.output);
});
// Spin up livereload server and listen for file changes
gulp.task('listen', function () {
livereload.listen();
gulp.watch(paths.input).on('change', function(file) {
gulp.start('default');
gulp.start('refresh');
});
});
// Run livereload after file change
gulp.task('refresh', ['compile', 'docs'], function () {
livereload.changed();
});
/**
* Task Runners
*/
// Compile files
gulp.task('compile', [
'lint:scripts',
'clean:dist',
'build:scripts'
]);
// Generate documentation
gulp.task('docs', [
'clean:docs',
'build:docs',
'copy:dist',
'copy:assets'
]);
// Compile files and generate docs (default)
gulp.task('default', [
'compile',
'docs'
]);
// Compile files and generate docs when something changes
gulp.task('watch', [
'listen',
'default'
]);
var elixir = require('laravel-elixir');
var paths = {
jquery: './vendor/bower_components/jquery/dist/',
fontawesome: './vendor/bower_components/font-awesome/'
}
elixir(function (mix) {
elixir.config.sourcemaps = false;
mix.sass(['app.scss'], 'resources/assets/css');
mix.styles([
'app.css'
]);
/* copy fonts in public directory */
mix.copy(paths.fontawesome + 'fonts', 'public/fonts');
mix.scripts([
paths.jquery + 'jquery.min.js'
], 'public/js/vendor.js', './'); /* provide the base directory */
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment