1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
| var gulp = require('gulp'), sass = require('gulp-sass'), sourcemaps = require('gulp-sourcemaps'), changed = require('gulp-changed'), autoprefixer = require('gulp-autoprefixer'), rapnode = require('rap-node-plugin'), Freemarker = require('freemarker.js'), livereload = require('gulp-livereload'), fs = require('fs'), http = require('http'); // 配置 var opt = { port: 3000, fileExt: '.html', //模板文件后缀 pwd: process.cwd(), //项目所在目录 webroot: '/WEB-INF/views', //模板文件目录 themes: '', //资源文件目录 livereload_src: ['WEB-INF/views/web/**/*.html', 'themes/web/(images|scripts|styles)/**/*'], scss_src: ['themes/web/scss/**/*.scss', '!themes/web/scss/base/*.scss'], base_src: 'themes/web/scss/base/*.scss', common_src: 'themes/web/scss/common.scss', style_src: 'themes/web/styles', map_src: './maps' }
// freeMarker配置 var fm = new Freemarker({ viewRoot: opt.pwd + opt.webroot, options: { /** for fmpp */ } });
global.RAP_FLAG = 1; // 开启RAP
// RAP配置 rapnode.config({ host: 'apidoc.wjs-dev.com', //启动的服务主机 port: '80', //端口号 projectId: 24, //RAP配置的项目ID mock: '/mockjs/', //RAP前缀 wrapper: '' //不需要包装 });
// 服务 gulp.task('server', function(){ var server = http.createServer(function(req, res){ var url = req.url if (url == '/') url = '/cashback/orginfo'; if (url.match(/\.\w+/)) { var fileDir = opt.pwd + opt.themes + url; if (fs.existsSync(fileDir)) { var content = fs.readFileSync(fileDir, 'utf-8'); res.end(content); } else { console.error('文件不存在: %s', fileDir); res.writeHead(400, {'Content-Type': 'text/plain'}); res.end(); } } rapnode.getRapData(url, function() { }, function(err, result) { if (err) { console.error('RAP报错:%s', err); console.error('URL:%s', url); } if (result.isPage == '1') { var fileDir = (result.renderPageUrl ? result.renderPageUrl : url) + opt.fileExt; fm.render(fileDir, result, function(err, html, output) { if (err) { console.error('Freemarker报错:%s', output); res.end(output); } res.end(html); }); } else { res.end(JSON.stringify(result)); } }); }); server.on('clientError', function(error, socket){ socket.end('HTTP/1.1 400 Bad Request\r\n\r\n'); }); server.listen(opt.port); });
// scss编译 gulp.task('scss', function(){ return gulp.src(opt.scss_src) .pipe(changed(opt.style_src)) .pipe(sourcemaps.init()) .pipe(sass({outputStyle: 'compressed'}).on('error', sass.logError)) .pipe(autoprefixer({ browsers: ['last 2 versions', 'IE 8', '> 1%'], cascade: false })) .pipe(sourcemaps.write(opt.map_src)) .pipe(gulp.dest(opt.style_src)); });
// 公共文件监听 gulp.task('common:watch', function(){ return gulp.src(opt.common_src) .pipe(sourcemaps.init()) .pipe(sass({outputStyle: 'compressed'}).on('error', sass.logError)) .pipe(autoprefixer({ browsers: ['last 2 versions', 'IE 8', '> 1%'], cascade: false })) .pipe(sourcemaps.write(opt.map_src)) .pipe(gulp.dest(opt.style_src)); });
// 监听任务 gulp.task('watch', function(){ livereload.listen(); gulp.watch(opt.livereload_src, function(file){ livereload.changed(file.path); }); gulp.watch(opt.base_src, ['common:watch']); gulp.watch(opt.scss_src, ['scss']); });
// 自动打开浏览器 gulp.task('browsers', function(){ var child_process = require("child_process"), url = "http://127.0.0.1:" + opt.port; if(process.platform == 'win32'){ cmd = 'start "%ProgramFiles%\Internet Explorer\iexplore.exe"'; }else if(process.platform == 'linux'){ cmd = 'xdg-open'; }else if(process.platform == 'darwin'){ cmd = 'open'; } child_process.exec(cmd + ' "'+url + '"'); });
gulp.task('default', ['server', 'watch', 'browsers'])
|