gulpfile.js 2.8 KB

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