gulpfile.js 2.0 KB

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