modules.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. var gulp = require('gulp');
  2. var plumber = require('gulp-plumber');
  3. var concat = require('gulp-concat');
  4. var template = require('gulp-template');
  5. var sourcemaps = require('gulp-sourcemaps');
  6. var del = require('del');
  7. var _ = require('lodash');
  8. // project configs
  9. var packageConf = require('../package.json');
  10. var srcConf = require('../src.json');
  11. // generates js/css files in dist directory
  12. gulp.task('modules', _.map(srcConf, function(srcFiles, distFile) {
  13. return 'modules:' + distFile; // generates an array of task names
  14. }));
  15. // generates js/css/sourcemap files in dist directory
  16. gulp.task('modules:dev', _.map(srcConf, function(srcFiles, distFile) {
  17. return 'modules:dev:' + distFile; // generates an array of task names
  18. }));
  19. // watches source files and generates js/css/sourcemaps
  20. gulp.task('modules:watch', _.map(srcConf, function(srcFiles, distFile) {
  21. return 'modules:watch:' + distFile; // generates an array of task names
  22. }));
  23. // deletes all generated js/css files in the dist directory
  24. gulp.task('modules:clean', function() {
  25. return del('dist/*.{js,css,map}');
  26. });
  27. // loop the distFile:srcFiles map
  28. _.forEach(srcConf, function(srcFiles, distFile) {
  29. var isJs = /\.js$/.test(distFile);
  30. var separator = isJs ? '\n;;\n' : '\n\n'; // inserted between concated files
  31. gulp.task('modules:' + distFile, function() {
  32. return gulp.src(srcFiles, { cwd: 'src/', base: 'src/' })
  33. .pipe(plumber()) // affects future streams
  34. .pipe(concat(distFile, { newLine: separator }))
  35. .pipe(template(packageConf)) // replaces <%= %> variables
  36. .pipe(gulp.dest('dist/'));
  37. });
  38. gulp.task('modules:dev:' + distFile, function() {
  39. return gulp.src(srcFiles, { cwd: 'src/', base: 'src/' })
  40. .pipe(plumber()) // affects future streams
  41. .pipe(sourcemaps.init())
  42. .pipe(concat(distFile, { newLine: separator }))
  43. .pipe(template(packageConf)) // replaces <%= %> variables
  44. .pipe(sourcemaps.write('.', {
  45. includeContent: false, // because we'll reference the src files
  46. sourceRoot: '../src/' // relative to outputted file in dist
  47. }))
  48. .pipe(gulp.dest('dist/'));
  49. });
  50. // generates dev files first, then watches
  51. gulp.task('modules:watch:' + distFile, [ 'modules:dev:' + distFile ], function() {
  52. return gulp.watch(srcFiles, { cwd: 'src/' }, [ 'modules:dev:' + distFile ]);
  53. });
  54. });