gulpfile.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. const path = require('path');
  2. const { Buffer } = require('buffer');
  3. const through2 = require('through2');
  4. const gulp = require('gulp');
  5. const merge2 = require('merge2');
  6. const gulpBabel = require('gulp-babel');
  7. const gulpTS = require('gulp-typescript');
  8. const sass = require('gulp-sass')(require('sass'));
  9. const replace = require('gulp-replace');
  10. const del = require('del');
  11. const tsConfig = require('./tsconfig.json');
  12. const getBabelConfig = require('./getBabelConfig');
  13. gulp.task('cleanLib', function cleanLib() {
  14. return del(['lib/**/*']);
  15. });
  16. function compileTSX(isESM) {
  17. const targetDir = isESM ? 'lib/es' : 'lib/cjs';
  18. const tsStream = gulp.src(['src/**/*.tsx', 'src/**/*.ts'])
  19. .pipe(gulpTS({
  20. ...tsConfig.compilerOptions,
  21. rootDir: path.join(__dirname, '..')
  22. }));
  23. const jsStream = tsStream.js
  24. .pipe(gulpBabel(getBabelConfig({ isESM })))
  25. .pipe(replace(/(require\(['"])([^'"]+)(\.scss)(['"]\))/g, '$1$2.css$4'))
  26. .pipe(replace(/(import\s+)['"]([^'"]+)(\.scss)['"]/, '$1\'$2.css\''))
  27. .pipe(gulp.dest(targetDir));
  28. const dtsStream = tsStream.dts
  29. .pipe(replace(/(require\(['"])([^'"]+)(\.scss)(['"]\))/g, '$1$2.css$4'))
  30. .pipe(replace(/(import\s+)['"]([^'"]+)(\.scss)['"]/, '$1\'$2.css\''))
  31. .pipe(gulp.dest(targetDir));
  32. return merge2([jsStream, dtsStream]);
  33. }
  34. gulp.task('compileTSXForESM', function compileTSXForESM() {
  35. return compileTSX(true);
  36. });
  37. gulp.task('compileTSXForCJS', function compileTSXForCJS() {
  38. return compileTSX(false);
  39. });
  40. gulp.task('compileScss', function compileScss() {
  41. return gulp.src(['src/**/*.scss'])
  42. .pipe(through2.obj(
  43. function (chunk, enc, cb) {
  44. const rootPath = path.join(__dirname, '../../');
  45. const scssVarStr = `@import "${rootPath}/packages/semi-theme-default/scss/index.scss";\n`;
  46. const scssBuffer = Buffer.from(scssVarStr);
  47. const buffers = [scssBuffer];
  48. chunk.contents = Buffer.concat([...buffers, chunk.contents]);
  49. cb(null, chunk);
  50. }
  51. ))
  52. .pipe(sass().on('error', sass.logError))
  53. .pipe(gulp.dest('lib/cjs'))
  54. .pipe(gulp.dest('lib/es'));
  55. });
  56. gulp.task('moveScss', function moveScss() {
  57. return gulp.src(['src/**/*.scss'])
  58. .pipe(gulp.dest('lib/cjs'))
  59. .pipe(gulp.dest('lib/es'));
  60. });
  61. gulp.task('compileLib', gulp.series(['cleanLib', 'compileScss', 'moveScss', gulp.parallel('compileTSXForESM', 'compileTSXForCJS')]));