gulpfile.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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. let scssRaw = chunk.contents.toString('utf-8');
  48. if (scssRaw.startsWith("@use")) {
  49. const scssRawSplit = scssRaw.split("\n");
  50. const codeStartIndex = scssRawSplit.findIndex(item => !item.startsWith("@use"));
  51. scssRawSplit.splice(codeStartIndex, 0, scssVarStr);
  52. scssRaw = scssRawSplit.join("\n");
  53. } else {
  54. scssRaw = `${scssVarStr}\n${scssRaw}`;
  55. }
  56. chunk.contents = Buffer.from(scssRaw, 'utf-8');
  57. cb(null, chunk);
  58. }
  59. ))
  60. .pipe(sass({
  61. charset: false
  62. }).on('error', sass.logError))
  63. .pipe(gulp.dest('lib/es'))
  64. .pipe(gulp.dest('lib/cjs'));
  65. });
  66. gulp.task('moveScss', function moveScss() {
  67. return gulp.src(['**/*.scss', '!node_modules/**/*.*'])
  68. .pipe(gulp.dest('lib/es'))
  69. .pipe(gulp.dest('lib/cjs'));
  70. });
  71. gulp.task('compileLib',
  72. gulp.series(
  73. [
  74. 'cleanLib', 'compileScss',
  75. 'moveScss',
  76. gulp.parallel('compileTSForESM', 'compileTSForCJS'),
  77. ]
  78. )
  79. );
  80. gulp.task('findDupCSSVariables', function findDupCSSVariables() {
  81. return gulp.src(['**/variable?.scss', '!node_modules/**/*.*'])
  82. .pipe(through2.obj((chunk, enc, cb) => {
  83. const fileStr = chunk.contents.toString(enc);
  84. const lines = fileStr.split('\n');
  85. const variables = new Set();
  86. for (let line of lines) {
  87. if (/\$[a-z]+(-[a-z0-9_]+)+/.test(line)) {
  88. const variable = line.split(':')[0];
  89. if (variables.has(variable)) {
  90. console.error(`❌ ${variable} dup`);
  91. } else {
  92. variables.add(variable);
  93. }
  94. }
  95. }
  96. cb();
  97. }));
  98. });