gulpfile.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. 'use strict';
  2. const gulp = require('gulp');
  3. const gutil = require('gulp-util');
  4. const minifyCss = require('gulp-minify-css');
  5. const minifyHtml = require('gulp-minify-html');
  6. const through = require('through2');
  7. const concat = require('gulp-concat');
  8. const merge2 = require('merge2');
  9. const _ = require('underscore');
  10. const del = require('del');
  11. function templateCache() {
  12. const contentTpl = '_.cache.put(<%= name %>, <%= content %>);\n';
  13. let content = '/* Below are templates cached from `_.template` with love :) */\n\n';
  14. function bufferContents(file, enc, cb) {
  15. if (file.isNull()) return cb();
  16. if (file.isStream())
  17. return this.emit('error', new gutil.PluginError('VM-cache', 'Stream is not supported.'));
  18. content += gutil.template(contentTpl, {
  19. name: JSON.stringify(('/' + file.relative).replace(/\\/g, '/')),
  20. content: _.template(String(file.contents), {variable: 'it'}).source,
  21. file: '',
  22. });
  23. cb();
  24. }
  25. function endStream(cb) {
  26. this.push(new gutil.File({
  27. base: '',
  28. path: 'template.js',
  29. contents: new Buffer(content),
  30. }));
  31. cb();
  32. }
  33. return through.obj(bufferContents, endStream);
  34. }
  35. gulp.task('templates', function () {
  36. return merge2([
  37. gulp.src('src/cache.js'),
  38. gulp.src('src/**/templates/*.html').pipe(templateCache()),
  39. ]).pipe(concat('cache.js'))
  40. .pipe(gulp.dest('dist'));
  41. });
  42. gulp.task('clean', function () {
  43. return del(['dist']);
  44. });
  45. gulp.task('copy-files',function(){
  46. return gulp.src([
  47. 'src/**',
  48. '!src/cache.js',
  49. '!src/**/templates/**',
  50. '!src/**/templates',
  51. ], {base:'src'})
  52. .pipe(gulp.dest('dist/'));
  53. });
  54. gulp.task('default', ['templates', 'copy-files']);