modules.js 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. var del = require('del');
  2. var _ = require('lodash');
  3. var gulp = require('gulp');
  4. var plumber = require('gulp-plumber');
  5. var concat = require('gulp-concat');
  6. var template = require('gulp-template');
  7. var sourcemaps = require('gulp-sourcemaps');
  8. var webpack = require('webpack-stream'); // for fullcalendar.js, use webpack
  9. // project configs
  10. var packageConf = require('../package.json');
  11. var srcConf = require('../src.json');
  12. var webpackConf = require('../webpack.config.js');
  13. // generates js/css files in dist directory
  14. gulp.task('modules', _.map(srcConf, function(srcFiles, distFile) {
  15. return 'modules:' + distFile; // generates an array of task names
  16. }), function() {
  17. return gulp.src(webpackConf.entry)
  18. .pipe(
  19. webpack(webpackConf)
  20. )
  21. .pipe(
  22. gulp.dest(webpackConf.output.path)
  23. );
  24. });
  25. // generates js/css/sourcemap files in dist directory
  26. gulp.task('modules:dev', _.map(srcConf, function(srcFiles, distFile) {
  27. return 'modules:dev:' + distFile; // generates an array of task names
  28. }), function() {
  29. return gulp.src(webpackConf.entry)
  30. .pipe(
  31. webpack(Object.assign({}, webpackConf, {
  32. devtool: 'source-map' // also 'inline-source-map'
  33. }))
  34. )
  35. .pipe(
  36. gulp.dest(webpackConf.output.path)
  37. );
  38. });
  39. // watches source files and generates js/css/sourcemaps
  40. gulp.task('modules:watch', _.map(srcConf, function(srcFiles, distFile) {
  41. return 'modules:watch:' + distFile; // generates an array of task names
  42. }), function() {
  43. return gulp.src(webpackConf.entry)
  44. .pipe(
  45. webpack(Object.assign({}, webpackConf, {
  46. devtool: 'source-map', // also 'inline-source-map'
  47. watch: true
  48. }))
  49. )
  50. .pipe(
  51. gulp.dest(webpackConf.output.path)
  52. );
  53. });
  54. // deletes all generated js/css files in the dist directory
  55. gulp.task('modules:clean', function() {
  56. return del('dist/*.{js,css,map}');
  57. });
  58. // loop the distFile:srcFiles map
  59. _.forEach(srcConf, function(srcFiles, distFile) {
  60. var isJs = /\.js$/.test(distFile);
  61. var separator = isJs ? '\n;;\n' : '\n\n'; // inserted between concated files
  62. gulp.task('modules:' + distFile, function() {
  63. return gulp.src(srcFiles, { cwd: 'src/', base: 'src/' })
  64. .pipe(plumber()) // affects future streams
  65. .pipe(concat(distFile, { newLine: separator }))
  66. .pipe(template(packageConf)) // replaces <%= %> variables
  67. .pipe(gulp.dest('dist/'));
  68. });
  69. gulp.task('modules:dev:' + distFile, function() {
  70. return gulp.src(srcFiles, { cwd: 'src/', base: 'src/' })
  71. .pipe(plumber()) // affects future streams
  72. .pipe(sourcemaps.init())
  73. .pipe(concat(distFile, { newLine: separator }))
  74. .pipe(template(packageConf)) // replaces <%= %> variables
  75. .pipe(sourcemaps.write('.', {
  76. includeContent: false, // because we'll reference the src files
  77. sourceRoot: '../src/' // relative to outputted file in dist
  78. }))
  79. .pipe(gulp.dest('dist/'));
  80. });
  81. // generates dev files first, then watches
  82. gulp.task('modules:watch:' + distFile, [ 'modules:dev:' + distFile ], function() {
  83. return gulp.watch(srcFiles, { cwd: 'src/' }, [ 'modules:dev:' + distFile ]);
  84. });
  85. });