var gulp = require('gulp'), //var deleted = require('gulp-deleted'); del = require('del'), uglify = require('gulp-tm-uglify'), rename = require('gulp-rename'), changed = require('gulp-changed'), gulpif = require('gulp-if'), minimist = require('minimist'), ftp = require('gulp-ftp'), sftp = require('gulp-sftp'), JSFtp = require('jsftp'), gutil = require('gulp-util'), fs = require("fs"); var through2 = require('through2'); var assetRev = require('gulp-tm-asset-rev'); var apps = require('./gulpapps.js'); var ftpconfig = require('./gulpconfig.js'); var o_options = minimist(process.argv.slice(2), {//upload: local ftp or sftp string: ["ev", "upload", "location", "host", "user", "pass", "port", "remotePath", "dest", "src"] }); var options = {}; var uploadOptions = ftpconfig.dev; if (o_options.ev && o_options.ev=="dev"){ options.ev = "dev"; uploadOptions = ftpconfig.dev; }else if (o_options.ev && o_options.ev=="release"){ options.ev = "release"; uploadOptions = ftpconfig.release; }else if (o_options.ev && o_options.ev=="wrdp"){ options.ev = "wrdp"; uploadOptions = ftpconfig.wrdp; }else{ options.ev = "dev"; uploadOptions = ftpconfig.dev; } options.upload = o_options.upload || ""; options.location = o_options.location || uploadOptions.location; options.host = o_options.host || uploadOptions.host; options.user = o_options.user || uploadOptions.user; options.pass = o_options.pass || uploadOptions.pass; options.port = o_options.port || uploadOptions.port; options.remotePath = o_options.remotePath || uploadOptions.remotePath; options.dest = o_options.dest || uploadOptions.dest || "dest"; var release_options = {}; release_options.ev = "release"; release_options.upload = o_options.upload || ""; release_options.location = o_options.location || ftpconfig.release.location; release_options.host = o_options.host || ftpconfig.release.host; release_options.user = o_options.user || ftpconfig.release.user; release_options.pass = o_options.pass || ftpconfig.release.pass; release_options.port = o_options.port || ftpconfig.release.port; release_options.remotePath = o_options.remotePath || ftpconfig.release.remotePath; release_options.dest = o_options.dest || ftpconfig.release.dest || "dest"; var appTasks = []; function getAppTask(path, isMin, thisOptions) { return function (cb) { //var srcFile = 'source/' + path + '/**/*'; var option = thisOptions || options; var src; var dest = option.dest+'/' + path + '/'; if (isMin){ var src_min = ['source/' + path + '/**/*.js', '!**/*.spec.js', '!**/test/**']; var src_move = ['source/' + path + '/**/*', '!**/*.spec.js', '!**/test/**']; gutil.log("Move-Uglify", ":", gutil.colors.green(gutil.colors.blue(path), gutil.colors.white('->'), dest)); return gulp.src(src_min) .pipe(changed(dest)) .pipe(uglify()) .pipe(rename({ extname: '.min.js' })) .pipe(gulpif((option.upload == 'local' && option.location != ''), gulp.dest(option.location + path + '/'))) .pipe(gulpif((option.upload == 'ftp' && option.host != ''), ftp({ host: option.host, user: option.user || 'anonymous', pass: option.pass || '@anonymous', port: option.port || 21, remotePath: (option.remotePath || '/') + path }))) .pipe(gulpif((option.upload == 'sftp' && option.host != ''), sftp({ host: option.host, user: option.user || 'anonymous', pass: option.pass || null, port: option.port || 22, remotePath: (option.remotePath || '/') + path }))) .pipe(gulpif((option.ev == "dev") ,gulp.dest(dest))) .pipe(gulp.src(src_move)) .pipe(changed(dest)) .pipe(gulpif((option.upload == 'local' && option.location != ''), gulp.dest(option.location + path + '/'))) .pipe(gulpif((option.upload == 'ftp' && option.host != ''), ftp({ host: option.host, user: option.user || 'anonymous', pass: option.pass || '@anonymous', port: option.port || 21, remotePath: (option.remotePath || '/') + path }))) .pipe(gulpif((option.upload == 'sftp' && option.host != ''), sftp({ host: option.host, user: option.user || 'anonymous', pass: option.pass || null, port: option.port || 22, remotePath: (option.remotePath || '/') + path }))) .pipe(gulp.dest(dest)) .pipe(gutil.noop()); }else{ src = ['source/' + path + '/**/*', '!**/*.spec.js', '!**/test/**']; gutil.log("Move", ":", gutil.colors.green(gutil.colors.blue(path), gutil.colors.white('->'), dest)); return gulp.src(src) .pipe(changed(dest)) .pipe(gulpif((option.upload == 'local' && option.location != ''), gulp.dest(option.location + path + '/'))) .pipe(gulpif((option.upload == 'ftp' && option.host != ''), ftp({ host: option.host, user: option.user || 'anonymous', pass: option.pass || '@anonymous', port: option.port || 21, remotePath: (option.remotePath || '/') + path }))) .pipe(gulpif((option.upload == 'sftp' && option.host != ''), sftp({ host: option.host, user: option.user || 'anonymous', pass: option.pass || null, port: option.port || 22, remotePath: (option.remotePath || '/') + path }))) .pipe(gulp.dest(dest)) .pipe(gutil.noop()); } } } //var taskObj = {}; apps.map(function (app) { var taskName; var isMin = (app.tasks.indexOf("min")!==-1); taskName = app.folder; appTasks.push(taskName); gulp.task(taskName, getAppTask(app.folder, isMin)); //var isMin = (app.tasks.indexOf("min")!==-1); taskName = app.folder+"_release"; //appTasks.push(taskName); gulp.task(taskName, getAppTask(app.folder, isMin, release_options)); }); // Object.keys(taskObj).map(function(k){ // exports[k] = parallel(taskObj[k]); // }); //exports[app.folder] = parallel(minTask, moveTask); function getCleanTask(path) { return function (cb) { if (path){ var dest = (path=="/") ? options.dest+"/" : options.dest+'/' + path + '/'; gutil.log("Clean", ":", gutil.colors.red(dest)); del.sync(dest, cb); cb(); }else{ cb(); } } } function cleanRemoteFtp(f, cb) { var file = options.remotePath + f; var ftp = new JSFtp({ host: options.host, user: options.user || 'anonymous', pass: options.pass || null, port: options.port || 21 }); ftp.raw('dele ' + file, function (err) { if (err) { cb(); return; } if (file.substring(file.length - 3).toLowerCase() == ".js") { file = file.replace('.js', ".min.js"); ftp.raw('dele ' + file, function (err) { if (err) { cb(); return; } if (file.indexOf("/") != -1) { var p = file.substring(0, file.lastIndexOf("/")); ftp.raw('rmd ' + p, function (err) { if (err) { cb(); return; } ftp.raw.quit(); cb(); }); } }); } else { if (file.indexOf("/") != -1) { var pPath = file.substring(0, file.lastIndexOf("/")); ftp.raw('rmd ' + pPath, function (err) { if (err) { cb(); return; } ftp.raw.quit(); cb(); }); } } }); } function cleanRemoteLocal(f, cb) { var file = options.location + f; del(file, { force: true, dryRun: true }, function () { if (file.substring(file.length - 3).toLowerCase() == ".js") { var minfile = file.replace('.js', ".min.js"); del(minfile, { force: true, dryRun: true }, function () { var p = file.substring(0, file.lastIndexOf("/")); fs.rmdir(p, function (err) { if (err) { } cb(); }) }); } else { var p = file.substring(0, file.lastIndexOf("/")); fs.rmdir(p, function (err) { if (err) { } cb(); }) } }); } function getCleanRemoteTask(path) { return function (cb) { if (options.upload) { var file = path.replace(/\\/g, "/"); file = file.substring(file.indexOf("source/") + 7); if (options.upload == 'local' && options.location != '') cleanRemoteLocal(file, cb); if (options.upload == 'ftp' && options.host != '') cleanRemoteFtp(file, cb); } else { if (cb) cb(); } } } function getWatchTask(path) { return (path) ? function (cb) { gutil.log("watch", ":", gutil.colors.green(path, "is watching ...")); gulp.watch(['source/' + path + '/**/*', "!./**/test/**"], { "events": ['addDir', 'add', 'change'] }, gulp.parallel([path])); } : function(cb){cb();}; } gulp.task("clean", getCleanTask(options.src)) gulp.task("watch", getWatchTask(options.src)); gulp.task("index", function () { var src = ['source/favicon.ico', 'source/index.html']; var dest = options.dest; return gulp.src(src) .pipe(changed(dest)) .pipe(gulpif((options.upload == 'local' && options.location != ''), gulp.dest(options.location + '/'))) .pipe(gulpif((options.upload == 'ftp' && options.host != ''), ftp({ host: options.host, user: options.user || 'anonymous', pass: options.pass || '@anonymous', port: options.port || 21, remotePath: (options.remotePath || '/') }))) .pipe(gulpif((options.upload == 'sftp' && options.host != ''), ftp({ host: options.host, user: options.user || 'anonymous', pass: options.pass || null, port: options.port || 22, remotePath: (options.remotePath || '/') }))) .pipe(gulp.dest(dest)) .pipe(gutil.noop()); }); gulp.task("cleanAll", getCleanTask('/')); gulp.task("o2:new-v:html", function () { var path = "x_desktop"; var src = 'source/x_desktop/*.html'; var dest = options.dest + '/x_desktop/'; return gulp.src(src) .pipe(assetRev()) .pipe(gulpif((options.upload == 'local' && options.location != ''), gulp.dest(options.location + path + '/'))) .pipe(gulpif((options.upload == 'ftp' && options.host != ''), ftp({ host: options.host, user: options.user || 'anonymous', pass: options.pass || '@anonymous', port: options.port || 21, remotePath: (options.remotePath || '/') + path }))) .pipe(gulpif((options.upload == 'sftp' && options.host != ''), sftp({ host: options.host, user: options.user || 'anonymous', pass: options.pass || null, port: options.port || 22, remotePath: (options.remotePath || '/') + path }))) .pipe(gulp.dest(dest)) .pipe(gutil.noop()); }); gulp.task("o2:new-v:o2", function () { var path = "o2_core"; var src = 'source/o2_core/o2.js'; var dest = options.dest +'/o2_core/'; return gulp.src(src) .pipe(assetRev()) .pipe(gulpif((options.upload == 'local' && options.location != ''), gulp.dest(options.location + path + '/'))) .pipe(gulpif((options.upload == 'ftp' && options.host != ''), ftp({ host: options.host, user: options.user || 'anonymous', pass: options.pass || '@anonymous', port: options.port || 21, remotePath: (options.remotePath || '/') + path }))) .pipe(gulpif((options.upload == 'sftp' && options.host != ''), sftp({ host: options.host, user: options.user || 'anonymous', pass: options.pass || null, port: options.port || 22, remotePath: (options.remotePath || '/') + path }))) .pipe(gulp.dest(dest)) .pipe(uglify()) .pipe(rename({ extname: '.min.js' })) .pipe(gulpif((options.upload == 'local' && options.location != ''), gulp.dest(options.location + path + '/'))) .pipe(gulpif((options.upload == 'ftp' && options.host != ''), ftp({ host: options.host, user: options.user || 'anonymous', pass: options.pass || '@anonymous', port: options.port || 21, remotePath: (options.remotePath || '/') + path }))) .pipe(gulpif((options.upload == 'sftp' && options.host != ''), sftp({ host: options.host, user: options.user || 'anonymous', pass: options.pass || null, port: options.port || 22, remotePath: (options.remotePath || '/') + path }))) .pipe(gulp.dest(dest)) .pipe(gutil.noop()); }); gulp.task("o2:new-v", gulp.parallel("o2:new-v:o2", "o2:new-v:html")); gulp.task("git_clean", function (cb) { var dest = 'D:/O2/github/huqi1980/o2oa/o2web/source/'; del(dest, { dryRun: true, force: true }, cb); }); gulp.task("git_dest", function () { var dest = "D:/O2/github/huqi1980/o2oa/o2web/source"; return gulp.src(["source/**/*", "!./**/test/**"]) .pipe(changed(dest)) .pipe(gulp.dest(dest)) }); gulp.task("git", gulp.series('git_clean', 'git_dest')); gulp.task("default", gulp.series(gulp.parallel(appTasks, 'index'), "o2:new-v"));