gulpfile.js 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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. ];
  39. gulp.task('compileScss', function compileScss() {
  40. return gulp.src(['**/*.scss', '!node_modules/**/*.*', '!**/rtl.scss', '!**/variables.scss', ...excludeScss])
  41. .pipe(through2.obj(
  42. function (chunk, enc, cb) {
  43. const rootPath = path.join(__dirname, '../../');
  44. const scssVarStr = `@import "${rootPath}/packages/semi-theme-default/scss/index.scss";\n`;
  45. const scssBuffer = Buffer.from(scssVarStr);
  46. chunk.contents = Buffer.concat([scssBuffer, chunk.contents]);
  47. cb(null, chunk);
  48. }
  49. ))
  50. .pipe(sass().on('error', sass.logError))
  51. .pipe(gulp.dest('lib/es'))
  52. .pipe(gulp.dest('lib/cjs'));
  53. });
  54. gulp.task('moveScss', function moveScss() {
  55. return gulp.src(['**/*.scss', '!node_modules/**/*.*'])
  56. .pipe(gulp.dest('lib/es'))
  57. .pipe(gulp.dest('lib/cjs'));
  58. });
  59. gulp.task('compileLib',
  60. gulp.series(
  61. [
  62. 'cleanLib', 'compileScss',
  63. 'moveScss',
  64. gulp.parallel('compileTSForESM', 'compileTSForCJS'),
  65. ]
  66. )
  67. );
  68. gulp.task('findDupCSSVariables', function findDupCSSVariables() {
  69. return gulp.src(['**/variable?.scss', '!node_modules/**/*.*'])
  70. .pipe(through2.obj((chunk, enc, cb) => {
  71. const fileStr = chunk.contents.toString(enc);
  72. const lines = fileStr.split('\n');
  73. const variables = new Set();
  74. for (let line of lines) {
  75. if (/\$[a-z]+(-[a-z0-9_]+)+/.test(line)) {
  76. const variable = line.split(':')[0];
  77. if (variables.has(variable)) {
  78. console.error(`❌ ${variable} dup`);
  79. } else {
  80. variables.add(variable);
  81. }
  82. }
  83. }
  84. cb();
  85. }));
  86. });