|
| 1 | +const gulp = require('gulp') |
| 2 | +const clean = require('gulp-clean') |
| 3 | +const changed = require('gulp-changed') |
| 4 | +const change = require('gulp-change') |
| 5 | +const config = require('./gulp.config') |
| 6 | +const sourcemaps = require('gulp-sourcemaps') |
| 7 | +const { handleSource } = require('@dcasia/mini-program-tailwind-webpack-plugin/dist/universal-handler') |
| 8 | +const { Processor } = require('windicss/lib') |
| 9 | +const { HTMLParser } = require('windicss/utils/parser') |
| 10 | +const through2 = require('through2') |
| 11 | +const fs = require('fs') |
| 12 | +const windiConfig = require('./windi.config.js') |
| 13 | + |
| 14 | +const outDir = config.outDir |
| 15 | +const styleSrc = config.style.src |
| 16 | +const templateSrc = config.template.src |
| 17 | +const otherSrc = config.other.src |
| 18 | + |
| 19 | +const processor = new Processor(windiConfig) |
| 20 | + |
| 21 | +gulp.task('handle:style', () => |
| 22 | + gulp.src( |
| 23 | + styleSrc, |
| 24 | + { |
| 25 | + since: gulp.lastRun('handle:style') |
| 26 | + } |
| 27 | + ) |
| 28 | + .pipe(sourcemaps.init()) |
| 29 | + .pipe(change(content => { |
| 30 | + return handleSource('style', content, {enableRpx: true}) |
| 31 | + })) |
| 32 | + .pipe(sourcemaps.write()) |
| 33 | + .pipe(gulp.dest(outDir)) |
| 34 | +) |
| 35 | + |
| 36 | +gulp.task('handle:template', |
| 37 | + gulp.series( |
| 38 | + () => gulp.src(templateSrc) |
| 39 | + .pipe(changed(outDir)) |
| 40 | + .pipe(change((content) => { |
| 41 | + |
| 42 | + return handleSource('template', content) |
| 43 | + |
| 44 | + })) |
| 45 | + .pipe(gulp.dest(outDir)), |
| 46 | + () => gulp.src(templateSrc) |
| 47 | + .pipe(through2.obj(function(file, enc, cb) { |
| 48 | + let result = '' |
| 49 | + if (file.isBuffer()) { |
| 50 | + const wxmlContent = file.contents.toString() |
| 51 | + const content = new HTMLParser(wxmlContent) |
| 52 | + .parseClasses() |
| 53 | + .map(i => i.result) |
| 54 | + .join(' ') |
| 55 | + const interpretedSheet = processor.interpret(content, true).styleSheet |
| 56 | + const MINIFY = true |
| 57 | + const styles = interpretedSheet.build(MINIFY) |
| 58 | + |
| 59 | + result = handleSource('style', styles, {enableRpx: true}) |
| 60 | + |
| 61 | + } |
| 62 | + cb(null, result) |
| 63 | + })) |
| 64 | + .pipe(fs.createWriteStream('./dist/windi.wxss', {'flags': 'a'})) |
| 65 | + ) |
| 66 | +) |
| 67 | + |
| 68 | +gulp.task('handle:other', () => |
| 69 | + gulp.src(otherSrc) |
| 70 | + .pipe(changed(outDir)) |
| 71 | + .pipe(gulp.dest(outDir)) |
| 72 | +) |
| 73 | + |
| 74 | +gulp.task('watch:style', () => { |
| 75 | + gulp.watch( |
| 76 | + styleSrc, |
| 77 | + gulp.series('handle:style') |
| 78 | + ) |
| 79 | +}) |
| 80 | + |
| 81 | +gulp.task('watch:template', () => { |
| 82 | + gulp.watch( |
| 83 | + templateSrc, |
| 84 | + gulp.series('handle:template') |
| 85 | + ) |
| 86 | +}) |
| 87 | + |
| 88 | +gulp.task('watch:other', () => { |
| 89 | + gulp.watch( |
| 90 | + otherSrc, |
| 91 | + gulp.series('handle:other') |
| 92 | + ) |
| 93 | +}) |
| 94 | + |
| 95 | +gulp.task( |
| 96 | + 'watch', |
| 97 | + gulp.parallel( |
| 98 | + 'watch:style', |
| 99 | + 'watch:template', |
| 100 | + 'watch:other' |
| 101 | + ) |
| 102 | +) |
| 103 | + |
| 104 | +gulp.task('clean', () => |
| 105 | + gulp.src( |
| 106 | + [ |
| 107 | + 'dist', |
| 108 | + './src/windi.wxss' |
| 109 | + ], |
| 110 | + { |
| 111 | + allowEmpty: true |
| 112 | + } |
| 113 | + ) |
| 114 | + .pipe(clean()) |
| 115 | +) |
| 116 | + |
| 117 | +gulp.task( |
| 118 | + 'default', |
| 119 | + gulp.series( |
| 120 | + 'clean', |
| 121 | + gulp.parallel( |
| 122 | + 'handle:style', |
| 123 | + 'handle:template', |
| 124 | + ), |
| 125 | + 'handle:other', |
| 126 | + 'watch' |
| 127 | + ) |
| 128 | +) |
0 commit comments