Files
html5-boilerplate/gulpfile.js
2014-08-05 16:27:36 +03:00

159 lines
4.7 KiB
JavaScript

var fs = require('fs');
var path = require('path');
var gulp = require('gulp');
var plugins = require('gulp-load-plugins')(); // Load all gulp plugins
// automatically and attach
// them to the `plugins` object
var runSequence = require('run-sequence'); // Temporary solution until gulp 4
// https://github.com/gulpjs/gulp/issues/355
var template = require('lodash').template;
var pkg = require('./package.json');
var dirs = pkg['h5bp-configs'].directories;
// -----------------------------------------------------------------------------
// | Helper tasks |
// -----------------------------------------------------------------------------
gulp.task('archive:create_archive_dir', function () {
fs.mkdirSync(path.resolve(dirs.archive), '0755');
});
gulp.task('archive:zip', function (done) {
var archiveName = path.resolve(dirs.archive, pkg.name + '_v' + pkg.version + '.zip');
var archiver = require('archiver')('zip');
var files = require('glob').sync('**/*.*', {
'cwd': dirs.dist,
'dot': true, // include hiddent files
});
var output = fs.createWriteStream(archiveName);
archiver.on('error', function (error) {
done();
throw error;
});
output.on('close', done);
files.forEach(function (file) {
var filePath = path.resolve(dirs.dist, file);
// `archiver.bulk` does not maintain the file
// permissions, so we need to add files individually
archiver.append(fs.createReadStream(filePath), {
'name': file,
'mode': fs.statSync(filePath)
});
});
archiver.pipe(output);
archiver.finalize();
});
gulp.task('clean', function (done) {
require('del')([
template('<%= archive %>', dirs),
template('<%= dist %>', dirs)
], done);
});
gulp.task('copy', [
'copy:.htaccess',
'copy:index.html',
'copy:jquery',
'copy:main.css',
'copy:misc',
'copy:normalize'
]);
gulp.task('copy:.htaccess', function () {
return gulp.src('node_modules/apache-server-configs/dist/.htaccess')
.pipe(plugins.replace(/# ErrorDocument/g, 'ErrorDocument'))
.pipe(gulp.dest(template('<%= dist %>', dirs)));
});
gulp.task('copy:index.html', function () {
return gulp.src(template('<%= src %>/index.html', dirs))
.pipe(plugins.replace(/{{JQUERY_VERSION}}/g, pkg.devDependencies.jquery))
.pipe(gulp.dest(template('<%= dist %>', dirs)));
});
gulp.task('copy:jquery', function () {
return gulp.src(['node_modules/jquery/dist/jquery.min.js'])
.pipe(plugins.rename('jquery-' + pkg.devDependencies.jquery + '.min.js'))
.pipe(gulp.dest(template('<%= dist %>/js/vendor', dirs)));
});
gulp.task('copy:main.css', function () {
var banner = '/*! HTML5 Boilerplate v' + pkg.version +
' | ' + pkg.license.type + ' License' +
' | ' + pkg.homepage + ' */\n\n';
return gulp.src(template('<%= src %>/css/main.css', dirs))
.pipe(plugins.header(banner))
.pipe(gulp.dest(template('<%= dist %>/css', dirs)));
});
gulp.task('copy:misc', function () {
return gulp.src([
// Copy all files
template('<%= src %>/**/*', dirs),
// Exclude the following files
// (other tasks will handle the copying of these files)
template('!<%= src %>/css/main.css', dirs),
template('!<%= src %>/index.html', dirs)
], {
// Include hidden files by default
dot: true
}).pipe(gulp.dest(template('<%= dist %>', dirs)));
});
gulp.task('copy:normalize', function () {
return gulp.src('node_modules/normalize.css/normalize.css')
.pipe(gulp.dest(template('<%= dist %>/css', dirs)));
});
gulp.task('jshint', function () {
return gulp.src([
'gulpfile.js',
template('<%= src %>/js/*.js', dirs)
]).pipe(plugins.jshint())
.pipe(plugins.jshint.reporter('jshint-stylish'))
.pipe(plugins.jshint.reporter('fail'));
});
// -----------------------------------------------------------------------------
// | Main tasks |
// -----------------------------------------------------------------------------
gulp.task('archive', function (done) {
runSequence(
'build',
'archive:create_archive_dir',
'archive:zip',
done);
});
gulp.task('build', function (done) {
runSequence(
['clean', 'jshint'],
'copy',
done);
});
gulp.task('default', ['build']);