[关闭]
@dlutwuwei 2015-12-15T10:18:29.000000Z 字数 5234 阅读 517

gulp配置和新建任务实践

gulp


  1. var gulp = require('gulp'),
  2. less = require('gulp-less'),
  3. autoprefixer = require('gulp-autoprefixer'),
  4. minifycss = require('gulp-minify-css'),
  5. jshint = require('gulp-jshint'),
  6. uglify = require('gulp-uglify'),
  7. imagemin = require('gulp-imagemin'),
  8. rename = require('gulp-rename'),
  9. clean = require('gulp-clean'),
  10. concat = require('gulp-concat'),
  11. notify = require('gulp-notify'),
  12. cache = require('gulp-cache'),
  13. livereload = require('gulp-livereload'),
  14. include = require('gulp-file-include'),
  15. replace = require('gulp-replace'),
  16. fs = require('fs'),
  17. connect = require('gulp-connect');
  18. var pkg = JSON.parse(fs.readFileSync('package.json'));
  19. var fs = require('fs');
  20. var request = require('request');
  21. var child = require('child_process');
  22. var runSequence = require('gulp-run-sequence');
  23. // 样式
  24. gulp.task('styles', function() {   
  25. return gulp.src('less/*.less')
  26. .pipe(less({
  27. style: 'expanded'
  28. }))
  29. .pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4')).pipe(gulp.dest('dist/css')).pipe(rename({
  30. suffix: '.min'
  31. }))
  32. .pipe(minifycss()).pipe(gulp.dest('dist/css')).pipe(notify({
  33. message: 'Styles task complete'
  34. }));
  35. }); 
  36. // 脚本
  37. var stylish = require('jshint-stylish');
  38. gulp.task('scripts', function() {   
  39. return gulp.src(['js/_J.js', 'js/adcookie.js', 'js/datasource.js', 'js/template.js', 'config.js'])
  40. //.pipe(jshint()).pipe(jshint.reporter(stylish))
  41. .pipe(concat('template.js')).pipe(gulp.dest('dist/js'))
  42. .pipe(rename({
  43. suffix: '.min'
  44. })).pipe(uglify()).pipe(gulp.dest('dist/js'))
  45. .pipe(notify({
  46. message: 'Scripts task complete'
  47. }));
  48. });
  49. // 图片
  50. gulp.task('images', function() {   
  51. return gulp.src('imgs/*').pipe(
  52. cache(
  53. imagemin({
  54. optimizationLevel: 3,
  55. progressive: true,
  56. interlaced: true
  57. }))
  58. ).pipe(gulp.dest('dist/imgs'))
  59. .pipe(notify({
  60. message: 'Images task complete'
  61. }));
  62. });
  63. gulp.task('dist', function() {
  64. return gulp.src('./html/*.html')
  65. .pipe(replace(/%%callback_data%%/g, fs.readFileSync('data.dat')))
  66. .pipe(replace(/<%=jsfile%>/, './dist/js/template.js'))
  67. .pipe(include({
  68. prefix: '@@',
  69. basepath: '@root'
  70. }))
  71. .pipe(gulp.dest('dist/html'))
  72. .pipe(notify({
  73. message: 'include tast complete'
  74. }))
  75. .pipe(notify({
  76. message: 'dist task complete'
  77. }))
  78. .pipe(connect.reload());
  79. });
  80. // 字符替换
  81. gulp.task('dist:proc', function() {
  82. return gulp.src('./html/*.html')
  83. .pipe(replace(/<%=jsfile%>/, './dist/js/template.min.js'))
  84. .pipe(include({
  85. prefix: '@@',
  86. basepath: '@root'
  87. }))
  88. .pipe(gulp.dest('dist/html'))
  89. .pipe(notify({
  90. message: 'include tast complete'
  91. }))
  92. .pipe(notify({
  93. message: 'dist task complete'
  94. }))
  95. .pipe(connect.reload());
  96. });
  97. // 清理
  98. gulp.task('clean', function() {   
  99. return gulp.src(['dist/css', 'dist/js', 'dist/html'], {
  100. read: false
  101. }).pipe(clean())
  102. .pipe(notify({
  103. message: 'clear dist ok'
  104. }));
  105. }); 
  106. // 预设任务
  107. gulp.task('dev', function() {
  108. runSequence('clean', 'styles', 'scripts', 'dist', 'watch', 'connect')
  109. }); 
  110. gulp.task('proc', function() {
  111. runSequence('clean', 'styles', 'scripts', 'dist:proc')
  112. });
  113. gulp.task('reload', function() {
  114. console.log('reload')
  115. runSequence('clean', 'styles', 'scripts', 'dist');
  116. })
  117. // 看守所有
  118. gulp.task('watch', function() {   
  119. gulp.watch(['html/*', 'tpl/*', 'js/*', 'less/*', 'data.dat', 'gulpfile.js'], ['reload']); 
  120. });
  121. gulp.task('connect', function(cb) {
  122. connect.server({
  123. root: 'dist',
  124. livereload: true,
  125. port: 8000
  126. });
  127. });
  128. var co = require('co');
  129. var thunkify = require('thunkify');
  130. var writeFile = thunkify(fs.writeFile);
  131. var readFile = thunkify(fs.readFile);
  132. var exec = thunkify(child.exec);
  133. var stat = thunkify(fs.stat);
  134. var mkdir = thunkify(fs.mkdir);
  135. var post = thunkify(request.post);
  136. var args = process.argv.slice(4);
  137. /**
  138. * 发布模板到线上,示例: gulp publish -id 107
  139. */
  140. gulp.task('publish', function(done) {
  141. var id = 107;
  142. if (args.length > 0) id = args[0];
  143. co(function*() {
  144. var reco = yield readFile('./dist/html/template' + pkg.size + '.html', 'utf-8');
  145. var tuodi = yield readFile('./tuodi.html', 'utf-8');
  146. var tuodilogo = yield readFile('./tuodilogo.html', 'utf-8');
  147. var out = yield post({
  148. url: 'http://check.x.jd.com/tplcrud/modify/' + id + '/reco/',
  149. form: {
  150. reco: reco
  151. }
  152. });
  153. console.log("ad" + id + ", reco post successed!");
  154. out = yield post({
  155. url: 'http://check.x.jd.com/tplcrud/modify/' + id + '/picture/',
  156. form: {
  157. picture: tuodi
  158. }
  159. });
  160. console.log("ad" + id + ",picture post successed!");
  161. out = post({
  162. url: 'http://check.x.jd.com/tplcrud/modify/' + id + '/back/',
  163. form: {
  164. back: tuodilogo
  165. }
  166. });
  167. console.log("ad" + id + ",tuodi post successed!");
  168. return yield Promise.resolve("完成");
  169. }).then(function(value) {
  170. console.log(value);
  171. done();
  172. }, function(err) {
  173. console.error(err.stack);
  174. done();
  175. });
  176. });
  177. /**
  178. * 写模板到svn目录并commit,示例:gulp write -id 107
  179. */
  180. gulp.task('write', ['dist:proc'], function(done) {
  181. var id = 107;
  182. if (args.length > 0) id = args[0];
  183. co(function*() {
  184. var reco = yield readFile('./dist/html/template' + pkg.size + '.html', 'utf-8');
  185. var tuodi = yield readFile('./tuodi.html', 'utf-8');
  186. var tuodilogo = yield readFile('./tuodilogo.html', 'utf-8');
  187. var rpath = 'd:/template/' + id;
  188. var state = yield stat(rpath);
  189. if (!state.isDirectory()) {
  190. yield mkdir(rpath)
  191. }
  192. yield writeFile('d:/template/' + id + "/template_ad_" + id, tuodi, "utf-8");
  193. console.log(id + "托底写入完成");
  194. yield writeFile('d:/template/' + id + "/template_ad_" + id + "_seckill", tuodilogo, "utf-8");
  195. console.log(id + "图片广告写入完成");
  196. yield writeFile('d:/template/' + id + "/template_ad_" + id + "_reco", reco, "utf-8");
  197. console.log(id + "推荐广告写入完成");
  198. var stdout = yield exec('svn update', {
  199. cwd: 'd:/template'
  200. });
  201. console.log(stdout.join('\n'));
  202. stdout = yield exec('svn add ' + id + ' --force', {
  203. cwd: 'd:/template'
  204. });
  205. console.log(stdout.join('\n'));
  206. stdout = yield exec('svn commit -m "' + args.join(',') + '广告位修改"', {
  207. cwd: 'd:/template'
  208. });
  209. console.log(stdout.join('\n'));
  210. return yield Promise.resolve("完成");
  211. }).then(function(value) {
  212. console.log(value);
  213. done();
  214. }, function(err) {
  215. console.error(err.stack);
  216. done();
  217. });
  218. });
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注