gulpfile.js 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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({
  51. charset: false
  52. }).on('error', sass.logError))
  53. .pipe(gulp.dest('lib/es'))
  54. .pipe(gulp.dest('lib/cjs'));
  55. });
  56. gulp.task('moveScss', function moveScss() {
  57. return gulp.src(['**/*.scss', '!node_modules/**/*.*'])
  58. .pipe(gulp.dest('lib/es'))
  59. .pipe(gulp.dest('lib/cjs'));
  60. });
  61. gulp.task('compileLib',
  62. gulp.series(
  63. [
  64. 'cleanLib', 'compileScss',
  65. 'moveScss',
  66. gulp.parallel('compileTSForESM', 'compileTSForCJS'),
  67. ]
  68. )
  69. );
  70. gulp.task('findDupCSSVariables', function findDupCSSVariables() {
  71. return gulp.src(['**/variable?.scss', '!node_modules/**/*.*'])
  72. .pipe(through2.obj((chunk, enc, cb) => {
  73. const fileStr = chunk.contents.toString(enc);
  74. const lines = fileStr.split('\n');
  75. const variables = new Set();
  76. for (let line of lines) {
  77. if (/\$[a-z]+(-[a-z0-9_]+)+/.test(line)) {
  78. const variable = line.split(':')[0];
  79. if (variables.has(variable)) {
  80. console.error(`❌ ${variable} dup`);
  81. } else {
  82. variables.add(variable);
  83. }
  84. }
  85. }
  86. cb();
  87. }));
  88. });