258 lines
6.3 KiB
JavaScript
258 lines
6.3 KiB
JavaScript
var gulp = require('gulp'),
|
|
$ = require('gulp-load-plugins')(),
|
|
browserify = require('browserify'),
|
|
buffer = require('vinyl-buffer'),
|
|
browserSync = require('browser-sync'),
|
|
del = require('del'),
|
|
fs = require('fs'),
|
|
historyApiFallback = require('connect-history-api-fallback'),
|
|
merge = require('merge-stream'),
|
|
path = require('path'),
|
|
runSequence = require('run-sequence'),
|
|
source = require('vinyl-source-stream'),
|
|
watchify = require('watchify');
|
|
|
|
var isProduction = function () {
|
|
return process.env.NODE_ENV === 'production';
|
|
},
|
|
target = function () {
|
|
return (isProduction() ? 'dist' : '.tmp');
|
|
},
|
|
middleware = historyApiFallback({});
|
|
|
|
function watchifyTask (options) {
|
|
var bundler, rebundle, iteration = 0;
|
|
bundler = browserify({
|
|
entries: path.join(__dirname, '/app/scripts/main.js'),
|
|
insertGlobals: true,
|
|
cache: {},
|
|
//debug: options.watch,
|
|
packageCache: {},
|
|
fullPaths: options.watch, //options.watch
|
|
extensions: ['.jsx'],
|
|
transform: [
|
|
['babelify', { ignore: /bower_components/ }]
|
|
]
|
|
});
|
|
|
|
if (options.watch) {
|
|
bundler = watchify(bundler);
|
|
}
|
|
|
|
rebundle = function () {
|
|
var stream = bundler.bundle();
|
|
|
|
if (options.watch) {
|
|
stream.on('error', function (err) {
|
|
console.log(err);
|
|
});
|
|
}
|
|
|
|
stream
|
|
.pipe(source($.if(options.watch, 'main.js', 'main.min.js')))
|
|
.pipe(buffer())
|
|
.pipe($.if(!options.watch, $.uglify()))
|
|
.pipe(gulp.dest(target() + '/assets'))
|
|
.pipe($.tap(function () {
|
|
if (iteration === 0 && options.cb) {
|
|
options.cb();
|
|
}
|
|
iteration++;
|
|
}));
|
|
};
|
|
|
|
bundler.on('update', rebundle);
|
|
return rebundle();
|
|
}
|
|
|
|
// Scripts
|
|
gulp.task('scripts', function (cb) {
|
|
return watchifyTask({
|
|
watch: !isProduction(),
|
|
cb: cb
|
|
});
|
|
});
|
|
|
|
gulp.task('lint', function () {
|
|
return gulp.src('app/scripts/**/*')
|
|
.pipe($.eslint({
|
|
useEslintrc: true
|
|
}))
|
|
.pipe($.eslint.format())
|
|
.pipe($.eslint.failOnError());
|
|
});
|
|
|
|
gulp.task('styles', function () {
|
|
return gulp.src('app/styles/main.scss')
|
|
.pipe($.plumber())
|
|
.pipe($.sass.sync({
|
|
precision: 4
|
|
}).on('error', $.sass.logError))
|
|
.pipe($.plumber.stop())
|
|
.pipe($.autoprefixer({
|
|
browsers: ['last 4 versions']
|
|
}))
|
|
.pipe(gulp.dest('.tmp/assets'));
|
|
});
|
|
|
|
gulp.task('media', function () {
|
|
return gulp.src(['**/*.{jpg,gif,png}'], { cwd: 'app/media/' })
|
|
.pipe($.imagemin({
|
|
verbose: true
|
|
}, {
|
|
progressive: true,
|
|
interlaced: true
|
|
}))
|
|
.pipe(gulp.dest('dist/media'))
|
|
.pipe($.size({
|
|
title: 'Media'
|
|
}));
|
|
});
|
|
|
|
|
|
gulp.task('readme', function () {
|
|
var json = JSON.parse(fs.readFileSync('./app/logos.json'));
|
|
|
|
return gulp.src('app/templates/README.handlebars')
|
|
.pipe($.compileHandlebars(json.items, {
|
|
batch: ['./app/templates']
|
|
}))
|
|
.pipe($.rename('README.md'))
|
|
.pipe(gulp.dest('./'));
|
|
});
|
|
|
|
gulp.task('copy', function () {
|
|
return gulp.src('app/media/**/*')
|
|
.pipe(gulp.dest('.tmp'));
|
|
});
|
|
|
|
gulp.task('bundle', function () {
|
|
var html,
|
|
vendor,
|
|
extras,
|
|
media,
|
|
logos,
|
|
assets = $.useref.assets();
|
|
|
|
html = gulp.src('app/*.html')
|
|
.pipe(assets)
|
|
.pipe($.if('*.js', $.uglify()))
|
|
.pipe($.if('*.css', $.cssmin()))
|
|
.pipe(assets.restore())
|
|
.pipe($.useref())
|
|
.pipe(gulp.dest('dist'))
|
|
.pipe($.size({
|
|
title: 'HTML'
|
|
}));
|
|
|
|
vendor = gulp.src('bower_components/modernizr/modernizr.js')
|
|
.pipe($.uglify())
|
|
.pipe($.rename('modernizr.min.js'))
|
|
.pipe(gulp.dest('dist/assets'))
|
|
.pipe($.size({
|
|
title: 'Vendor'
|
|
}));
|
|
|
|
extras = gulp.src([
|
|
'CNAME'
|
|
])
|
|
.pipe(gulp.dest('dist'))
|
|
.pipe($.size({
|
|
title: 'Extras'
|
|
}));
|
|
|
|
media = gulp.src([
|
|
'**/*.svg'
|
|
], { base: 'app/media' })
|
|
.pipe(gulp.dest('dist/media'))
|
|
.pipe($.size({
|
|
title: 'Media'
|
|
}));
|
|
|
|
logos = gulp.src([
|
|
'**/*.svg'
|
|
], { base: 'logos' })
|
|
.pipe(gulp.dest('dist/logos'))
|
|
.pipe($.size({
|
|
title: 'Logos'
|
|
}));
|
|
|
|
return merge(html, vendor, extras, media, logos);
|
|
});
|
|
|
|
gulp.task('sizer', function () {
|
|
return gulp.src(target() + '/**/*')
|
|
.pipe($.size({
|
|
title: 'Build',
|
|
gzip: true
|
|
}));
|
|
});
|
|
|
|
gulp.task('assets', function (cb) {
|
|
runSequence('styles', 'scripts', cb); //, 'fonts'
|
|
});
|
|
|
|
gulp.task('clean', function (cb) {
|
|
del([target() + '/*'], cb);
|
|
});
|
|
|
|
gulp.task('gh-pages', function () {
|
|
return gulp.src(['dist/**/*'], {
|
|
dot: true
|
|
})
|
|
.pipe($.ghPages({
|
|
force: true
|
|
}));
|
|
|
|
});
|
|
|
|
gulp.task('serve', ['assets'], function () {
|
|
browserSync({
|
|
notify: true,
|
|
logPrefix: 'logos',
|
|
files: ['app/*.html', '.tmp/assets/**/*.*', 'app/media/**/*', 'app/logos.json'],
|
|
server: {
|
|
baseDir: ['.tmp', 'app', './'],
|
|
middleware: [middleware],
|
|
routes: {
|
|
'/bower_components': './bower_components'
|
|
}
|
|
}
|
|
});
|
|
|
|
gulp.watch('app/styles/**/*.scss', function (e) {
|
|
if (e.type === 'changed') {
|
|
gulp.start('styles');
|
|
}
|
|
});
|
|
|
|
gulp.watch('app/logos.json', ['readme']);
|
|
});
|
|
|
|
gulp.task('build', function (cb) {
|
|
process.env.NODE_ENV = 'production';
|
|
runSequence('clean', 'lint', 'readme', 'assets', ['media', 'bundle'], 'sizer', cb);
|
|
});
|
|
|
|
gulp.task('deploy', function (cb) {
|
|
runSequence('build', ['gh-pages'], cb);
|
|
});
|
|
|
|
gulp.task('deploy-old', ['build'], function () {
|
|
return gulp.src([
|
|
'logos/*.svg',
|
|
'.tmp/*.html',
|
|
'.tmp/main.css',
|
|
'.tmp/main.js',
|
|
'app/media/**/*',
|
|
'app/CNAME',
|
|
'*.md'
|
|
])
|
|
.pipe($.ghPages({
|
|
force: true
|
|
}));
|
|
|
|
});
|
|
|
|
gulp.task('default', ['serve']);
|