gulpfile.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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 gulpTS = require('gulp-typescript');
  7. const gulpBabel = require('gulp-babel');
  8. const sass = require('gulp-sass')(require('sass'));
  9. const del = require('del');
  10. const tsConfig = require('./tsconfig.json');
  11. const getBabelConfig = require('./getBabelConfig');
  12. gulp.task('cleanLib', function cleanLib() {
  13. return del(['lib/**/*']);
  14. });
  15. function compileTS(isESM) {
  16. const targetDir = isESM ? 'lib/es' : 'lib/cjs';
  17. const tsStream = gulp.src(['**/*.ts', '!node_modules/**/*.*'])
  18. .pipe(gulpTS(tsConfig.compilerOptions));
  19. const jsStream = tsStream.js
  20. .pipe(gulpBabel(getBabelConfig({ isESM })))
  21. .pipe(gulp.dest(targetDir));
  22. const dtsStream = tsStream.dts.pipe(gulp.dest(targetDir));
  23. return merge2([jsStream, dtsStream]);
  24. }
  25. gulp.task('compileTSForESM', function compileTSForESM() {
  26. return compileTS(true);
  27. });
  28. gulp.task('compileTSForCJS', function compileTSForCJS() {
  29. return compileTS(false);
  30. });
  31. const excludeScss = [
  32. '!**/button/splitButtonGroup.scss',
  33. '!**/steps/bacisSteps.scss',
  34. '!**/steps/fillSteps.scss',
  35. '!**/steps/navSteps.scss',
  36. '!**/table/operationPanel.scss',
  37. '!**/tooltip/arrow.scss',
  38. '!**/autoComplete/option.scss',
  39. '!**/select/option.scss',
  40. ];
  41. gulp.task('compileScss', function compileScss() {
  42. return gulp.src(['**/*.scss', '!node_modules/**/*.*', '!**/rtl.scss', '!**/variables.scss', "!**/animation.scss", ...excludeScss])
  43. .pipe(through2.obj(
  44. function (chunk, enc, cb) {
  45. const rootPath = path.join(__dirname, '../../');
  46. const scssVarStr = `@import "${rootPath}/packages/semi-theme-default/scss/index.scss";\n`;
  47. const scssBuffer = Buffer.from(scssVarStr);
  48. chunk.contents = Buffer.concat([scssBuffer, chunk.contents]);
  49. cb(null, chunk);
  50. }
  51. ))
  52. .pipe(sass({
  53. charset: false
  54. }).on('error', sass.logError))
  55. .pipe(gulp.dest('lib/es'))
  56. .pipe(gulp.dest('lib/cjs'));
  57. });
  58. gulp.task('moveScss', function moveScss() {
  59. return gulp.src(['**/*.scss', '!node_modules/**/*.*'])
  60. .pipe(gulp.dest('lib/es'))
  61. .pipe(gulp.dest('lib/cjs'));
  62. });
  63. gulp.task('compileLib',
  64. gulp.series(
  65. [
  66. 'cleanLib', 'compileScss',
  67. 'moveScss',
  68. gulp.parallel('compileTSForESM', 'compileTSForCJS'),
  69. ]
  70. )
  71. );
  72. gulp.task('findDupCSSVariables', function findDupCSSVariables() {
  73. return gulp.src(['**/variable?.scss', '!node_modules/**/*.*'])
  74. .pipe(through2.obj((chunk, enc, cb) => {
  75. const fileStr = chunk.contents.toString(enc);
  76. const lines = fileStr.split('\n');
  77. const variables = new Set();
  78. for (let line of lines) {
  79. if (/\$[a-z]+(-[a-z0-9_]+)+/.test(line)) {
  80. const variable = line.split(':')[0];
  81. if (variables.has(variable)) {
  82. console.error(`❌ ${variable} dup`);
  83. } else {
  84. variables.add(variable);
  85. }
  86. }
  87. }
  88. cb();
  89. }));
  90. });