gulpfile.js 2.7 KB

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