1
0

gulpfile.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. const gulp = require('gulp');
  2. const sourcemaps = require('gulp-sourcemaps');
  3. const source = require('vinyl-source-stream');
  4. const buffer = require('vinyl-buffer');
  5. const browserify = require('browserify');
  6. const watchify = require('watchify');
  7. const babelify = require('babelify');
  8. const pathmod = require('pathmodify');
  9. const babel = require('gulp-babel');
  10. const uglify = require('gulp-uglify');
  11. const gutil = require('gulp-util');
  12. const zip = require('gulp-zip');
  13. const fs = require('fs');
  14. const path = require('path');
  15. const es = require('event-stream');
  16. const Promise = require('bluebird');
  17. Promise.promisifyAll(fs);
  18. // const archiveFiles = [
  19. // 'style.css',
  20. // 'screenshot.png',
  21. // '*.php'
  22. // ];
  23. // const builtFiles = [
  24. // 'js/*'
  25. // ];
  26. const watchedFiles = [
  27. 'src/markdown/**/*'
  28. ];
  29. // const themeName = 'reago';
  30. function buildClient(watch, done) {
  31. var bundler =
  32. browserify('./src/index.js', { debug: true })
  33. .plugin(pathmod, {mods: [
  34. pathmod.mod.dir('node_modules', __dirname + '/node_modules'),
  35. ]})
  36. // Transform JSX https://github.com/andreypopp/reactify/issues/58
  37. // Fix unexpected ... https://github.com/babel/babel-loader/issues/170
  38. .transform(babelify, { presets: ['es2015', 'stage-0', 'react'] });
  39. return new Promise(function (resolve, reject) {
  40. bundler.bundle()
  41. .on('error', function(err) { console.error(err); this.emit('end'); })
  42. .pipe(source('bundle.react.js'))
  43. .pipe(buffer())
  44. // .pipe(uglify())
  45. .pipe(sourcemaps.init({ loadMaps: true }))
  46. .pipe(sourcemaps.write('./'))
  47. .pipe(gulp.dest('./js'))
  48. .on('end', resolve);
  49. });
  50. }
  51. function extractMarkdown() {
  52. // return new Promise(function (resolve, reject) {
  53. return fs.readdirAsync('src/markdown')
  54. .then(subdirs => Promise.reduce(
  55. subdirs,
  56. (carry, dir) =>
  57. fs.readdirAsync('src/markdown/' + dir)
  58. .then(files => Promise.reduce(
  59. files,
  60. (carry, f) => fs.readFileAsync('src/markdown/' + dir + '/' + f)
  61. .then(buf => buf.toString())
  62. .then(content => Object.assign(carry, { [path.basename(f, '.md')]: content })),
  63. {}
  64. ))
  65. .then(content => Object.assign(carry, { [dir]: content })),
  66. {}
  67. ))
  68. .then(JSON.stringify)
  69. .then(markdownJson => fs.writeFileAsync('src/markdown.json', markdownJson))
  70. // });
  71. }
  72. // function makeZip(cb) {
  73. // return extractThemeVersion()
  74. // .then(themeVersion => {
  75. // var base = 'dist/' + themeVersion;
  76. // var tmp = base + '/reago';
  77. // var rebasedFiles = base + '/**/*';
  78. // es.concat(
  79. // gulp.src(archiveFiles)
  80. // .pipe(gulp.dest(tmp)),
  81. // gulp.src(builtFiles)
  82. // .pipe(gulp.dest( tmp + '/js')),
  83. // gulp.src(rebasedFiles, { base })
  84. // .pipe(zip(themeName + '-' + themeVersion + '.zip'))
  85. // .pipe(gulp.dest('dist'))
  86. // ).on('end', cb)
  87. // });
  88. // }
  89. gulp.task('watch', function() {
  90. gulp.watch(['src'], buildClient);
  91. gulp.watch(watchedFiles, extractMarkdown);
  92. });
  93. gulp.task('buildClient', function() {
  94. return buildClient();
  95. });
  96. gulp.task('extractMarkdown', function() {
  97. return extractMarkdown();
  98. });
  99. // gulp.task('makeZip', makeZip);
  100. gulp.task('default', gulp.series('buildClient', 'extractMarkdown', 'watch'));