var gulp = require('gulp'), fs = require('fs'), ftp = require('gulp-ftp'), gutil = require('gulp-util'), path = require('path'), plumber = require('gulp-plumber'), sass = require('gulp-sass'), concat = require('gulp-concat'), uglify = require('gulp-uglify'), // md5 = require("gulp-md5"), autoprefixer = require('gulp-autoprefixer'), server = require('gulp-develop-server'), minifycss = require('gulp-minify-css'), webpack = require('webpack'); var crypto = require("crypto"); var rename = require("gulp-rename"); var clean = require('gulp-clean'); var wconfig = require('./webpack.config'); var env = process.env.NODE_ENV || 'development'; var config = JSON.parse(fs.readFileSync('./package.json').toString()); var assets_dir = 'dist/' + config.name + '/assets'; var public_dir = '../public'; var server_dir = '../server'; var dist_dir = { js: 'dist/' + config.name + '/' + config.version, css: 'dist/' + config.name + '/' + config.version, image: assets_dir + '/images', font: assets_dir + '/fonts' }; var cdn_domain = 'http://cdn.yoho.cn/'; var md5 = ""; //+crypto.createHash('md5').update(new Date().toString()).digest('hex');; var ftpConfig = { host: '218.94.75.58', user: 'php', pass: 'yoho9646' }; gulp.task('default', ["sass", "js"]); gulp.task('start', ["default", "default-watch", "server"]); gulp.task('build', ["clean"], function() { gulp.start(["buildjs", "assets", "static-config"]); }); //"static-config" //预编译css gulp.task('sass', function() { gulp.src('sass/index.scss') .pipe(plumber()) .pipe(sass({ outputStyle: 'compressed' }).on('error', sass.logError)) .pipe(minifycss()) .pipe(autoprefixer({ browsers: ['last 5 versions'], cascade: false })) .pipe(gulp.dest(path.join(public_dir, "dist"))); }); //预编译js gulp.task('js', function(cb) { wconfig.output.path = path.join(public_dir, "dist"); webpack(wconfig, cb); }); //监控css和js gulp.task("default-watch", function() { gulp.watch('sass/**/*.scss', ['sass']); gulp.watch('js/**/*.js', ['js']); }); gulp.task("clean", function() { return gulp.src(dist_dir.js + "/", { read: false }) .pipe(clean()); }); //发布js文件 gulp.task("buildjs", ["js"], function() { gulp.src(path.join(public_dir, "dist") + '/*.js') .pipe(uglify()) // .pipe(rename({ // suffix:md5 // })) .pipe(gulp.dest(dist_dir.js)); }); //发布静态资源 gulp.task('assets', function() { gulp.src(public_dir + '/img/**') .pipe(gulp.dest(dist_dir.image)); gulp.src(public_dir + '/fonts/*') .pipe(gulp.dest(dist_dir.font)); gulp.src(path.join(public_dir, "dist") + '/*.css') .pipe(minifycss()) .pipe(gulp.dest(dist_dir.css)); // var str=fs.readFileSync(public_dir + '/css/all.css','utf-8'); // attr=str.replace(/(\n|\r)*/g,'').replace(/(\n)+@import url\(\'/g,function(name){ // return public_dir + '/css/'; // }).replace(/\'\)/g,'').split(';'); // gulp.src(attr) // .pipe(concat('all.css')) // .pipe(minifycss()) // .pipe(gulp.dest(dist_dir.css)) }); //配置静态资源文件 gulp.task("static-config", function() { // var files = fs.readdirSync('./dist/libs'); var staticConfig = { test: { path: '/dist' }, preview: { path: cdn_domain + config.name + '/' + config.version, md5: md5 }, production: { path: cdn_domain + config.name + '/' + config.version, md5: md5 } } fs.writeFileSync('../server/staticConfig.js', "exports.staticDir = " + JSON.stringify(staticConfig)); }); //发布到CDN gulp.task('dist', function() { var ftpstream = ftp(ftpConfig); return gulp.src('dist/**/') .pipe(ftpstream) .pipe(gutil.noop()); }); //启动服务 gulp.task('server', function() { server.listen({ path: server_dir + '/app.js' }); gulp.watch([ server_dir + '/app.js', server_dir + "/{interface,adapter,config,mid,stub,util}/**/*.js", server_dir + "/views/**/*.html" ], server.restart); });