@dlutwuwei
2015-12-15T10:18:29.000000Z
字数 5234
阅读 517
gulp
var gulp = require('gulp'),less = require('gulp-less'),autoprefixer = require('gulp-autoprefixer'),minifycss = require('gulp-minify-css'),jshint = require('gulp-jshint'),uglify = require('gulp-uglify'),imagemin = require('gulp-imagemin'),rename = require('gulp-rename'),clean = require('gulp-clean'),concat = require('gulp-concat'),notify = require('gulp-notify'),cache = require('gulp-cache'),livereload = require('gulp-livereload'),include = require('gulp-file-include'),replace = require('gulp-replace'),fs = require('fs'),connect = require('gulp-connect');var pkg = JSON.parse(fs.readFileSync('package.json'));var fs = require('fs');var request = require('request');var child = require('child_process');var runSequence = require('gulp-run-sequence');// 样式gulp.task('styles', function() {return gulp.src('less/*.less').pipe(less({style: 'expanded'})).pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4')).pipe(gulp.dest('dist/css')).pipe(rename({suffix: '.min'})).pipe(minifycss()).pipe(gulp.dest('dist/css')).pipe(notify({message: 'Styles task complete'}));});// 脚本var stylish = require('jshint-stylish');gulp.task('scripts', function() {return gulp.src(['js/_J.js', 'js/adcookie.js', 'js/datasource.js', 'js/template.js', 'config.js'])//.pipe(jshint()).pipe(jshint.reporter(stylish)).pipe(concat('template.js')).pipe(gulp.dest('dist/js')).pipe(rename({suffix: '.min'})).pipe(uglify()).pipe(gulp.dest('dist/js')).pipe(notify({message: 'Scripts task complete'}));});// 图片gulp.task('images', function() {return gulp.src('imgs/*').pipe(cache(imagemin({optimizationLevel: 3,progressive: true,interlaced: true}))).pipe(gulp.dest('dist/imgs')).pipe(notify({message: 'Images task complete'}));});gulp.task('dist', function() {return gulp.src('./html/*.html').pipe(replace(/%%callback_data%%/g, fs.readFileSync('data.dat'))).pipe(replace(/<%=jsfile%>/, './dist/js/template.js')).pipe(include({prefix: '@@',basepath: '@root'})).pipe(gulp.dest('dist/html')).pipe(notify({message: 'include tast complete'})).pipe(notify({message: 'dist task complete'})).pipe(connect.reload());});// 字符替换gulp.task('dist:proc', function() {return gulp.src('./html/*.html').pipe(replace(/<%=jsfile%>/, './dist/js/template.min.js')).pipe(include({prefix: '@@',basepath: '@root'})).pipe(gulp.dest('dist/html')).pipe(notify({message: 'include tast complete'})).pipe(notify({message: 'dist task complete'})).pipe(connect.reload());});// 清理gulp.task('clean', function() {return gulp.src(['dist/css', 'dist/js', 'dist/html'], {read: false}).pipe(clean()).pipe(notify({message: 'clear dist ok'}));});// 预设任务gulp.task('dev', function() {runSequence('clean', 'styles', 'scripts', 'dist', 'watch', 'connect')});gulp.task('proc', function() {runSequence('clean', 'styles', 'scripts', 'dist:proc')});gulp.task('reload', function() {console.log('reload')runSequence('clean', 'styles', 'scripts', 'dist');})// 看守所有gulp.task('watch', function() {gulp.watch(['html/*', 'tpl/*', 'js/*', 'less/*', 'data.dat', 'gulpfile.js'], ['reload']);});gulp.task('connect', function(cb) {connect.server({root: 'dist',livereload: true,port: 8000});});var co = require('co');var thunkify = require('thunkify');var writeFile = thunkify(fs.writeFile);var readFile = thunkify(fs.readFile);var exec = thunkify(child.exec);var stat = thunkify(fs.stat);var mkdir = thunkify(fs.mkdir);var post = thunkify(request.post);var args = process.argv.slice(4);/*** 发布模板到线上,示例: gulp publish -id 107*/gulp.task('publish', function(done) {var id = 107;if (args.length > 0) id = args[0];co(function*() {var reco = yield readFile('./dist/html/template' + pkg.size + '.html', 'utf-8');var tuodi = yield readFile('./tuodi.html', 'utf-8');var tuodilogo = yield readFile('./tuodilogo.html', 'utf-8');var out = yield post({url: 'http://check.x.jd.com/tplcrud/modify/' + id + '/reco/',form: {reco: reco}});console.log("ad" + id + ", reco post successed!");out = yield post({url: 'http://check.x.jd.com/tplcrud/modify/' + id + '/picture/',form: {picture: tuodi}});console.log("ad" + id + ",picture post successed!");out = post({url: 'http://check.x.jd.com/tplcrud/modify/' + id + '/back/',form: {back: tuodilogo}});console.log("ad" + id + ",tuodi post successed!");return yield Promise.resolve("完成");}).then(function(value) {console.log(value);done();}, function(err) {console.error(err.stack);done();});});/*** 写模板到svn目录并commit,示例:gulp write -id 107*/gulp.task('write', ['dist:proc'], function(done) {var id = 107;if (args.length > 0) id = args[0];co(function*() {var reco = yield readFile('./dist/html/template' + pkg.size + '.html', 'utf-8');var tuodi = yield readFile('./tuodi.html', 'utf-8');var tuodilogo = yield readFile('./tuodilogo.html', 'utf-8');var rpath = 'd:/template/' + id;var state = yield stat(rpath);if (!state.isDirectory()) {yield mkdir(rpath)}yield writeFile('d:/template/' + id + "/template_ad_" + id, tuodi, "utf-8");console.log(id + "托底写入完成");yield writeFile('d:/template/' + id + "/template_ad_" + id + "_seckill", tuodilogo, "utf-8");console.log(id + "图片广告写入完成");yield writeFile('d:/template/' + id + "/template_ad_" + id + "_reco", reco, "utf-8");console.log(id + "推荐广告写入完成");var stdout = yield exec('svn update', {cwd: 'd:/template'});console.log(stdout.join('\n'));stdout = yield exec('svn add ' + id + ' --force', {cwd: 'd:/template'});console.log(stdout.join('\n'));stdout = yield exec('svn commit -m "' + args.join(',') + '广告位修改"', {cwd: 'd:/template'});console.log(stdout.join('\n'));return yield Promise.resolve("完成");}).then(function(value) {console.log(value);done();}, function(err) {console.error(err.stack);done();});});