gulpfile.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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 tailwind = {
  15. paths: [path.join(__dirname, 'tailwind.css'), path.join(sourcePath, '**/*.css')],
  16. outputDir: path.join(outputPath, 'css'),
  17. outputName: 'tailwind.build.css',
  18. }
  19. const css = {
  20. async watchCSS () {
  21. // remove tailwind core css
  22. await new Promise((resolve) => {
  23. css._buildTailwind(
  24. tailwind.paths.shift(),
  25. 'tailwind.core.css'
  26. )
  27. .on('end', resolve)
  28. })
  29. return gulp.watch(
  30. tailwind.paths, { ignoreInitial: false },
  31. css._buildTailwind.bind(null, void 0, void 0))
  32. },
  33. buildCSS (...params) {
  34. return gulp.series(css._buildTailwind.bind(null, void 0, void 0), css._optimizeCSSForRelease)(...params)
  35. },
  36. _buildTailwind (entry, output) {
  37. return gulp.src(entry || tailwind.paths)
  38. .pipe(cached('postcss-' + entry))
  39. .pipe(postcss())
  40. .pipe(remember('postcss-' + entry))
  41. .pipe(concat(output || tailwind.outputName))
  42. .pipe(gulp.dest(tailwind.outputDir))
  43. },
  44. _optimizeCSSForRelease () {
  45. // tailwind.core.css placeholder
  46. fs.writeFileSync(path.join(outputPath, 'css', 'tailwind.core.css'), '')
  47. return gulp.src(path.join(outputPath, 'css', 'style.css'))
  48. .pipe(cleanCSS())
  49. .pipe(gulp.dest(path.join(outputPath, 'css')))
  50. },
  51. }
  52. const common = {
  53. clean () {
  54. return del(outputPath)
  55. },
  56. syncResourceFile () {
  57. return gulp.src(resourceFilePath).pipe(gulp.dest(outputPath))
  58. },
  59. keepSyncResourceFile () {
  60. return gulp.watch(resourceFilePath, { ignoreInitial: false }, common.syncResourceFile)
  61. }
  62. }
  63. exports.clean = common.clean
  64. exports.watch = gulp.parallel(common.keepSyncResourceFile, css.watchCSS)
  65. exports.build = gulp.series(common.clean, common.syncResourceFile, css.buildCSS)