gulpfile.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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 => carry.concat({
  63. title: path.basename(f, '.md'), content
  64. })),
  65. []
  66. ))
  67. .then(content => Object.assign(carry, { [dir]: content })),
  68. {}
  69. ))
  70. .then(JSON.stringify)
  71. .then(markdownJson => fs.writeFileAsync('src/markdown.json', markdownJson))
  72. // });
  73. }
  74. // function makeZip(cb) {
  75. // return extractThemeVersion()
  76. // .then(themeVersion => {
  77. // var base = 'dist/' + themeVersion;
  78. // var tmp = base + '/reago';
  79. // var rebasedFiles = base + '/**/*';
  80. // es.concat(
  81. // gulp.src(archiveFiles)
  82. // .pipe(gulp.dest(tmp)),
  83. // gulp.src(builtFiles)
  84. // .pipe(gulp.dest( tmp + '/js')),
  85. // gulp.src(rebasedFiles, { base })
  86. // .pipe(zip(themeName + '-' + themeVersion + '.zip'))
  87. // .pipe(gulp.dest('dist'))
  88. // ).on('end', cb)
  89. // });
  90. // }
  91. gulp.task('watch', function() {
  92. gulp.watch(['src'], buildClient);
  93. gulp.watch(watchedFiles, extractMarkdown);
  94. });
  95. gulp.task('buildClient', function() {
  96. return buildClient();
  97. });
  98. gulp.task('extractMarkdown', function() {
  99. return extractMarkdown();
  100. });
  101. // gulp.task('makeZip', makeZip);
  102. gulp.task('default', gulp.series('buildClient', 'extractMarkdown', 'watch'));