gulpfile.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. const fs = require('fs')
  2. const path = require('path')
  3. const gulp = require('gulp')
  4. const postcss = require('gulp-postcss')
  5. const concat = require('gulp-concat')
  6. const cached = require('gulp-cached')
  7. const remember = require('gulp-remember')
  8. const cleanCSS = require('gulp-clean-css')
  9. const del = require('del')
  10. const outputPath = path.join(__dirname, 'static')
  11. const resourcesPath = path.join(__dirname, 'resources')
  12. const sourcePath = path.join(__dirname, 'src/main/frontend')
  13. const resourceFilePath = path.join(resourcesPath, '**')
  14. const tailwindCoreEntry = path.join(__dirname, 'tailwind.css')
  15. const tailwindBuildEntry = path.join(sourcePath, '**/*.css')
  16. const tailwind = {
  17. paths: [tailwindCoreEntry, tailwindBuildEntry],
  18. outputDir: path.join(outputPath, 'css'),
  19. outputName: 'tailwind.build.css',
  20. }
  21. const css = {
  22. async watchCSS () {
  23. // remove tailwind core css
  24. await new Promise((resolve) => {
  25. css._buildTailwind(
  26. tailwind.paths.shift(),
  27. 'tailwind.core.css'
  28. )
  29. .on('end', resolve)
  30. })
  31. return gulp.watch(
  32. tailwind.paths, { ignoreInitial: false },
  33. css._buildTailwind.bind(null, void 0, void 0))
  34. },
  35. buildCSS (...params) {
  36. return gulp.series(
  37. css._buildTailwind.bind(null, tailwindCoreEntry, 'tailwind.core.css'),
  38. css._buildTailwind.bind(null, tailwindBuildEntry, 'tailwind.build.css'),
  39. css._optimizeCSSForRelease)(...params)
  40. },
  41. _buildTailwind (entry, output) {
  42. return gulp.src(entry || tailwind.paths)
  43. .pipe(cached('postcss-' + entry))
  44. .pipe(postcss())
  45. .pipe(remember('postcss-' + entry))
  46. .pipe(concat(output || tailwind.outputName))
  47. .pipe(gulp.dest(tailwind.outputDir))
  48. },
  49. _optimizeCSSForRelease () {
  50. return gulp.src(path.join(outputPath, 'css', 'style.css'))
  51. .pipe(cleanCSS())
  52. .pipe(gulp.dest(path.join(outputPath, 'css')))
  53. },
  54. }
  55. const common = {
  56. clean () {
  57. return del(outputPath)
  58. },
  59. syncResourceFile () {
  60. return gulp.src(resourceFilePath).pipe(gulp.dest(outputPath))
  61. },
  62. keepSyncResourceFile () {
  63. return gulp.watch(resourceFilePath, { ignoreInitial: false }, common.syncResourceFile)
  64. }
  65. }
  66. exports.clean = common.clean
  67. exports.watch = gulp.parallel(common.keepSyncResourceFile, css.watchCSS)
  68. exports.build = gulp.series(common.clean, common.syncResourceFile, css.buildCSS)