/**
* Gulp 依赖
*/
var autoprefixer = require('gulp-autoprefixer');
var babelify = require('babelify');
var browserify = require('gulp-browserify');
var browser_sync = require('browser-sync').create();
var del = require('del');
var gulp = require('gulp');
var jade = require('gulp-jade');
var minify_css = require('gulp-minify-css');
var plumber = require('gulp-plumber');
var reload = browser_sync.reload;
var rename = require('gulp-rename');
var sass = require('gulp-sass');
var sourcemaps = require('gulp-sourcemaps');
var uglify = require('gulp-uglify');
/**
* 路径
*/
var BROWSERIFY_IN = 'es6/[^_]*.js';
var BROWSERIFY_OUT = 'dist/static/coin/js';
var BROWSERIFY_WATCH = 'es6/*.js';
var IMG_IN = 'img/**';
var IMG_OUT = 'dist/static/coin/img';
var IMG_WATCH = 'img/**';
var JADE_IN = 'jade/[^_]*.jade';
var JADE_OUT = 'dist/templates/coin';
var JADE_WATCH = 'jade/*.jade';
var SCSS_IN = 'scss/app.scss';
var SCSS_OUT = 'dist/static/coin/css';
var SCSS_WATCH = 'scss/*.scss';
var CLEAN_FILES = [
'dist/static/coin/**',
'dist/templates/coin/**'
];
/**
* Jade 预编译
*/
gulp.task('jade', () => {
var JADE_OPTIONS = {
pretty: true
};
return gulp.src(JADE_IN)
// 处理错误, 以下同理
.pipe(plumber())
.pipe(jade(JADE_OPTIONS))
.pipe(gulp.dest(JADE_OUT))
// 刷新浏览器, 以下同理
.pipe(reload({stream: true}));
});
/**
* Scss 预编译
* 入口文件: scss/app.scss
*/
gulp.task('scss', () => {
var PREFIXER_OPTIONS = [
'ie_mob >= 10',
'ios >= 6.1',
'android >= 2.3'
];
var SCSS_OPTIONS = {
outputStyle: 'expanded'
};
return gulp.src(SCSS_IN)
.pipe(sourcemaps.init())
.pipe(sass(SCSS_OPTIONS).on('error', sass.logError))
.pipe(autoprefixer(PREFIXER_OPTIONS))
.pipe(gulp.dest(SCSS_OUT))
// 生成压缩版本
.pipe(rename({suffix: '.min'}))
.pipe(minify_css())
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest(SCSS_OUT))
.pipe(reload({stream: true}));
});
/**
* Babel 预编译 + Browserify 打包
*/
gulp.task('browserify', () => {
return gulp.src(BROWSERIFY_IN)
.pipe(plumber())
.pipe(sourcemaps.init())
.pipe(browserify({
transform: [
babelify.configure({
presets: ['es2015']
})
]
}))
.pipe(gulp.dest(BROWSERIFY_OUT))
// 生成压缩版本
.pipe(rename({suffix: '.min'}))
.pipe(uglify())
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest(BROWSERIFY_OUT))
.pipe(reload({stream: true}));
});
/**
* 图片压缩
* 太慢, 算了, 以后再说吧
*/
gulp.task('imagemin', () => {
var IMAGE_OPTIONS = {
optimizationLevel: 3, // between 0 - 7
progressive: true,
interlaced: true
};
return gulp.src(IMG_IN)
.pipe(plumber())
//.pipe(imagemin(IMAGE_OPTIONS))
.pipe(gulp.dest(IMG_OUT))
.pipe(reload({stream: true}));
});
/**
* 项目清理
* dev 和 dist 都清掉
*/
gulp.task('clean', () => {
return del(CLEAN_FILES);
});
/**
* 代码检查
*/
// 老子代码写这么屌, 从来不检查 (#‵′)凸
/**
* 启动 Browser-Sync 和文件变动监控
*/
gulp.task('watch', () => {
browser_sync.init({
proxy: 'localhost:9999'
});
gulp.watch(BROWSERIFY_WATCH, ['browserify']);
gulp.watch(JADE_WATCH, ['jade']);
gulp.watch(SCSS_WATCH, ['scss']);
gulp.watch(IMG_WATCH, ['imagemin']);
});
/**
* 默认 task
* 启动 watcher 和 browser-sync
*/
gulp.task('default', ['watch'], () => {
console.log('Winter is coming, and now my watch shall begins...');
});