let gulp = require('gulp'), clean = require('gulp-clean'), gulpif = require('gulp-if'), minify = require('gulp-minify'), jshint = require('gulp-jshint'), babel = require('gulp-babel'), runSequence = require('run-sequence'), copy = require('gulp-copy'), cleanCss = require('gulp-clean-css'), csslint = require('gulp-csslint'), rename = require("gulp-rename"), imagemin = require("gulp-image"), concat = require("gulp-concat"), plumber = require("gulp-plumber"), zip = require('gulp-zip'), useref = require('gulp-useref'), args = require('get-gulp-args')(), replace = require('gulp-replace-task'); var platform = 'chrome'; if (args.platform == 'firefox') { platform = 'moz'; } var onError = function (err) { console.log(err); }; gulp.task('clean', function() { return gulp.src([ 'release/*', 'extension.zip' ], {force: true}) .pipe(clean()); }); gulp.task('compress', function() { return gulp.src('release/**/*') .pipe(zip('extension.zip')) .pipe(gulp.dest('.')); }); gulp.task('jslint', function() { return gulp.src('extension/**/*.js') .pipe(jshint({ esversion: 6 })) .pipe(jshint.reporter('jshint-stylish')); }); gulp.task('csslint', function() { return gulp.src('extension/**/*.css') .pipe(csslint()) .pipe(csslint.formatter()) }); gulp.task('dev-no-lint', function() { return runSequence( 'clean', ['core', 'content_scripts'], 'images', 'manifest', 'font' ); }); gulp.task('dev', function() { return runSequence( 'clean', ['jslint', 'csslint'], ['core', 'content_scripts'], 'images', 'manifest', 'font' ); }); gulp.task('release', function() { return runSequence( 'clean', ['jslint', 'csslint'], ['core', 'content_scripts'], 'images', 'manifest', 'font', 'compress' ); }); gulp.task('font', function() { return gulp.src('extension/fonts/**/*') .pipe(gulp.dest('release/fonts')); }); gulp.task('core', function() { return gulp.src('extension/view/*.html') .pipe(useref()) .pipe(plumber({ errorHandler: onError })) .pipe(gulpif('*.js', replace({ patterns : [ { match : /\/\/\*\* NODE(?:\n.*)*\/\/\*\*/, replace : '' } ] }))) .pipe(gulpif('*.js', babel({ presets: ['es2015'] }))) .pipe(gulpif('*.js', minify({ ext:{ min:'.js' }, noSource : true }))) .pipe(replace({ patterns : [ { match : /\*\*\*browser\*\*\*/g, replace : platform } ] })) .pipe(gulpif('*.css', cleanCss({ }))) .pipe(gulp.dest('release/view')); }); gulp.task('content_scripts', function() { let notification = gulp.src([ 'extension/js/content_scripts/notification.js', ]) .pipe(plumber()) .pipe(gulpif('*.js', replace({ patterns : [ { match : /\/\/\*\* NODE(?:\n.*)*\/\/\*\*/, replace : '' } ] }))) .pipe(babel({ presets : ["es2015"] })) .pipe(concat('notification.js')) .pipe(minify({ ext : { min : '.min.js' }, noSource : true })) .pipe(gulp.dest('release/js')); let serp = gulp.src([ 'extension/js/content_scripts/serp.js' ]) .pipe(plumber()) .pipe(gulpif('*.js', replace({ patterns : [ { match : /\/\/\*\* NODE(?:\n.*)*\/\/\*\*/, replace : '' } ] }))) .pipe(babel({ presets : ["es2015"] })) .pipe(minify({ ext : { min : '.min.js' }, noSource : true })) .pipe(gulp.dest('release/js')); let extension = gulp.src([ 'extension/js/content_scripts/extension.js' ]) .pipe(plumber()) .pipe(gulpif('*.js', replace({ patterns : [ { match : /\/\/\*\* NODE(?:\n.*)*\/\/\*\*/, replace : '' } ] }))) .pipe(babel({ presets : ["es2015"] })) .pipe(minify({ ext : { min : '.min.js' }, noSource : true })) .pipe(gulp.dest('release/js')); return [notification, serp, extension]; }); gulp.task('images', function() { return gulp.src('extension/images/*') .pipe(imagemin()) .pipe(gulp.dest('release/images')) }); gulp.task('manifest', function() { return gulp.src('extension/manifest.json') .pipe(gulp.dest('release')) }) gulp.task('watch', function() { gulp.watch('extension/**/*', ['dev-no-lint']); })