UNPKG

kwt-example

Version:

description

244 lines (223 loc) 7.87 kB
var gulp = require('gulp'), connectSSI = require('connect-ssi'), open = require('open'), path = require('path'), fs = require('fs'), browserify = require('browserify'), source = require('vinyl-source-stream'), buffer = require('vinyl-buffer'), path = require('path'), url = require('url'), $ = require('gulp-load-plugins')(); var pkg = JSON.parse(fs.readFileSync('./package.json')), name = pkg.name, version = pkg.version; var domain = { dev: '/', prd: '//st.haiziwang.com/static/pc/' } var opt = { distFolder: './dist', srcFolder: './src' } var manifest = gulp.src("./manifest.json"); function isRelease() { var result = /release/.test(this.seq.slice(-1)[0]) ? true : false; return result; } function folder() { var obj = {}; obj.src = './src' var release = /release/.test(this.seq.slice(-1)[0]) ? true : false; if (!release) { obj.dt = './dist'; obj.st = path.join(obj.dt) } else { obj.dt = './release' obj.st = path.join(obj.dt, version) } return obj; } function replaceall(env, type) { var name = path.parse(__dirname).name; if (env == 'release') { if (type == 'sinclude') { return $.replace('{{:sinclude}}', '/static/pc/common/') } else if (type == 'api') { return $.replace('{{:api}}', domain.prd + 'api/') } else if (type == 'vendor') { return $.replace('{{:vendor}}', domain.prd + 'vendor/') } else { return $.replace('{{:static}}', domain.prd + name + '/' + version + '/') } } else { if (type == 'sinclude') { return $.replace('{{:sinclude}}', '../../common/') } else if (type == 'api') { return $.replace('{{:api}}', domain.dev + 'api/') } else if (type == 'vendor') { return $.replace('{{:vendor}}', domain.dev + 'vendor/') } else { return $.replace('{{:static}}', domain.dev + name + '/' + 'dist' + '/') } } } function resourceConcat($, file, type, attr) { var srcArr = []; var hostUrl = domain.prd; var $ele = $(type); var ver = parseInt(Date.now() / 10000); if ($ele.length > 1) { $ele.each(function(index, item) { srcArr.push($(this).attr(attr).replace(new RegExp(hostUrl, 'g'), '')); if (index !== 0) $(this).remove() }) $ele.attr(attr, hostUrl + "??" + srcArr.join(',')); $ele.attr(attr, $ele.attr(attr) + '?' + ver) } else if ($ele.length == 1) { $ele.attr(attr, $ele.attr(attr) + '?' + ver) } } function findFiles(dir) { var dir = dir || __dirname; var files = []; function walk(dir, files) { var f = fs.readdirSync(dir); f.forEach(function(item) { var tmpPath = path.join(dir, item), stats = fs.statSync(tmpPath); if (!stats.isDirectory()) { files.push(item); } }); }; walk(dir, files); return files; } gulp.task('res', function() { var fd = folder.call(this) gulp.src([fd.src + '/**/*.{png,gif,jpg}']) .pipe(gulp.dest(fd.st)) }); gulp.task('sass', ['res'], function() { var fd = folder.call(this) var condition = isRelease.call(this) gulp.src(fd.src + '/css/*.scss') .pipe($.plumber()) .pipe(!condition ? $.sass() : $.sass({ outputStyle: 'compressed' })) .on('error', $.util.log) .pipe($.autoprefixer({ browsers: ['last 5 versions'], cascade: false })) .pipe(!condition ? replaceall('', 'api') : replaceall('release', 'api')) .pipe(!condition ? replaceall('', 'sinclude') : replaceall('release', 'sinclude')) .pipe(!condition ? replaceall('', 'static') : replaceall('release', 'static')) .pipe(!condition ? replaceall('', 'vendor') : replaceall('release', 'vendor')) .pipe(gulp.dest(fd.st + '/css')) }); gulp.task('script', function() { var files = findFiles(__dirname + '/src/js') var fd = folder.call(this) var condition = isRelease.call(this) files.forEach(function(file, index) { browserify({ entries: fd.src + '/js/' + file, debug: condition ? false : true }) .bundle() .pipe($.plumber()) .pipe(source(file)) .pipe($.plumber()) .pipe(buffer()) .pipe($.plumber()) .pipe(!condition ? replaceall('', 'api') : replaceall('release', 'api')) .pipe(!condition ? replaceall('', 'sinclude') : replaceall('release', 'sinclude')) .pipe(!condition ? replaceall('', 'static') : replaceall('release', 'static')) .pipe(!condition ? replaceall('', 'vendor') : replaceall('release', 'vendor')) .pipe(condition ? $.util.noop() : $.sourcemaps.init({ loadMaps: true })) .pipe(!condition ? $.util.noop() : $.uglify()) .on('error', $.util.log) .pipe(condition ? $.util.noop() : $.sourcemaps.write('./')) .pipe(gulp.dest(fd.st + '/js')) }) }) gulp.task('connect', function() { $.connect.server({ root: path.resolve(__dirname, '../'), port: 2000, livereload: true, middleware: function(connect, opt) { var middlewares = []; middlewares.push(connectSSI({ ext: '.html', baseDir: path.resolve(__dirname, '../'), payload: { ENV_TYPE: 'dev', https: false, channel: '', page: 'package.json' } })) return middlewares; } }); }); gulp.task('build', ['sass', 'script'], function() { var fd = folder.call(this) var condition = isRelease.call(this) gulp.src([fd.src + '/**/*.{html,hbs}']) .pipe(!condition ? replaceall('', 'api') : replaceall('release', 'api')) .pipe(!condition ? replaceall('', 'sinclude') : replaceall('release', 'sinclude')) .pipe(!condition ? replaceall('', 'static') : replaceall('release', 'static')) .pipe(!condition ? replaceall('', 'vendor') : replaceall('release', 'vendor')) .pipe(!condition ? $.util.noop() : $.cheerio({ run: function($, file) { resourceConcat($, file, "link[rel='stylesheet']", 'href') resourceConcat($, file, 'script[type="text/javascript"]', 'src') }, parserOptions: { decodeEntities: false } })) .pipe(gulp.dest(fd.dt)) }); gulp.task(':open', ['default'], function() { open('http://localhost:2000/' + name + '/dist') }) gulp.task('clean', function() { var fd = folder.call(this) gulp.src(fd.dt) .pipe($.rimraf({ force: true })) }) gulp.task('clean:release', function() { var fd = folder.call(this) gulp.src(fd.dt) .pipe($.rimraf({ force: true })) }) gulp.task('release', ['build'], function() { // var exec = require('child_process').exec; // exec('scp -r ./release/1.0.0 root@172.172.177.51:/data/static/static/pc/order/ && scp -r ./release/*.html root@172.172.177.51:/data/pcmall/order', // function(err, out, stderr) { // if (!err) { // gulp.src("").pipe($.notify({ // title: 'gulp notify', // message: "dev发布完成" // })); // } else { // console.log(err) // } // }) }) gulp.task('default', ['build', 'connect'], function() { var fd = folder.call(this) gulp.watch([fd.src + '/**'], ['build']); })