module.exports = function(gulp, plugins) { var argv = require('yargs').argv, chalk = require('chalk'), moment = require('moment'), portfinder = require('portfinder'), browserSync = require('browser-sync'), reload = browserSync.reload, log = console.log; var that = this; that.port = +argv.p || undefined; var pkg = require('../package.json'); var banner = '/*!' + '\n * @project : ' + pkg.name + '\n * @version : ' + pkg.version + '\n * @author : ' + pkg.author + '\n * @update : ' + moment().format('YYYY-MM-DD h:mm:ss a') + '\n */\r'; gulp.task('dev_conn', function() { portfinder.getPort(function (err, port) { browserSync({ server: { baseDir: "src", directory: true }, notify: false, ghostMode:false, port: that.port||port, open: "external", browser: "/Applications/Google\ Chrome.app/" }) }) }) gulp.task('dev_sass', function() { var config = { onError: function(err){ log(chalk.bold.red('【sass compile error】>>> \n' + err)) } } // no sourcemaps, more faster if(argv.n){ return gulp.src('src/sass/*.scss') .pipe(plugins.cached('sass', {optimizeMemory: true})) .pipe(plugins.sass(config)) .pipe(plugins.autoprefixer("last 1 version", "> 1%", "ie 8", "ie 7")) .pipe(plugins.remember('sass')) .pipe(gulp.dest('src/css')) .pipe(reload({stream:true})) } return gulp.src('src/sass/*.scss') // .pipe(plugins.cached('sass', {optimizeMemory: true})) .pipe(plugins.sourcemaps.init()) .pipe(plugins.sass(config)) // .pipe(plugins.sass()) // .on('error', plugins.notify.onError(function(err){return err.message})) .pipe(plugins.sourcemaps.write({includeContent: false, sourceRoot: '../sass/'})) // .pipe(plugins.sourcemaps.init({loadMaps: true})) // .pipe(plugins.autoprefixer("last 1 version", "> 1%", "ie 8", "ie 7")) // .pipe(plugins.sourcemaps.write({includeContent: false, sourceRoot: '../sass/'})) // .pipe(plugins.remember('sass')) .pipe(gulp.dest('src/css')) .pipe(reload({stream:true})) }) gulp.task('dev_ejs', function() { return gulp.src('src/tpl/*.ejs') .pipe(plugins.ejs().on('error', console.log)) .pipe(gulp.dest('src/')) .pipe(reload({stream:true})) }) gulp.task('dev_slice2css', function(){ var fs = require('fs') var path = require('path') var async = require('gulp-uglify/node_modules/uglify-js/node_modules/async') var gm = require('gm') var ejs = require('gulp-ejs/node_modules/ejs') var classnameRule = function(fileName, p){ var relPath = path.relative('src/slice', path.dirname(p)) var name = path.join(relPath, fileName).replace(/\//g, '-') return name } var files, data = {} async.series([ // 列出图片 function(next){ var glob = require("glob") files = glob.sync("src/slice/**", {nodir:true}) files = files.filter(function(f){ return !~(path.basename(f).indexOf('@')) }) next(null) }, // 生成数据 function(next){ var arr = data.slice = [] async.eachSeries(files, iterator, callback) function iterator(f, _next){ gm(f).size(function(err, size){ if(err){return} arr.push({ filepath: f, imageurl: path.relative('src/sass', f).split(path.sep).join('/'), classname: classnameRule.call({}, path.basename(f, path.extname(f)), f), width: size.width, height: size.height }) _next(null) }) } function callback(err, result){ next(null) } }, // 生成css function(next){ var tpl = (function(){/* // CSS Sprites切片样式 <% slice.forEach(function(e){ %> .<%= e.classname%> { width: <%= e.width%>px; height: <%= e.height %>px; background-image: url(<%= e.imageurl%>); background-repeat: no-repeat; } <% }) %> */}).toString().split('\n').slice(1, -1).join('\n') var css = ejs.render(tpl, data).replace(/^\n/mg, '') fs.writeFileSync('src/sass/_slice.scss', css) } ]) }) gulp.task('default', ['dev_conn'], function(){ if(argv.w){ gulp.watch('src/slice/**', ['dev_slice2css']) } gulp.watch('src/tpl/**', ['dev_ejs']) gulp.watch('src/sass/**', ['dev_sass']) gulp.watch('src/img/**', reload) gulp.watch('src/js/**', reload) gulp.watch('src/*.html', reload) }) }