gulpfile.js 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. const path = require('path');
  2. const { Buffer } = require('buffer');
  3. const through2 = require('through2');
  4. const merge2 = require('merge2');
  5. const gulp = require('gulp');
  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('compileTSX', function compileTSX() {
  17. const tsStream = gulp.src(['**/*.tsx', '**/*.ts', '!**/node_modules/**/*.*', '!**/_story/**/*.*'])
  18. .pipe(gulpTS({
  19. ...tsConfig.compilerOptions,
  20. rootDir: path.join(__dirname, '..')
  21. }));
  22. const jsStream = tsStream.js
  23. .pipe(gulpBabel(babelConfig))
  24. .pipe(replace(/(import\s+)['"]@douyinfe\/semi-foundation\/([^'"]+)['"]/g, '$1\'@douyinfe/semi-foundation/lib/es/$2\''))
  25. .pipe(replace(/(import\s+.+from\s+)['"]@douyinfe\/semi-foundation\/([^'"]+)['"]/g, '$1\'@douyinfe/semi-foundation/lib/es/$2\''))
  26. .pipe(replace(/(import\s+)['"]([^'"]+)(\.scss)['"]/g, '$1\'$2.css\''))
  27. .pipe(gulp.dest('lib/es'));
  28. const dtsStream = tsStream.dts
  29. .pipe(replace(/(import\s+)['"]@douyinfe\/semi-foundation\/([^'"]+)['"]/g, '$1\'@douyinfe/semi-foundation/lib/es/$2\''))
  30. .pipe(replace(/(import\s+.+from\s+)['"]@douyinfe\/semi-foundation\/([^'"]+)['"]/g, '$1\'@douyinfe/semi-foundation/lib/es/$2\''))
  31. .pipe(replace(/(import\(['"])@douyinfe\/semi-foundation\/(.+)/g, '$1@douyinfe/semi-foundation/lib/es/$2'))
  32. .pipe(replace(/(import\s+)['"]([^'"]+)(\.scss)['"]/g, '$1\'$2.css\''))
  33. .pipe(gulp.dest('lib/es'));
  34. return merge2([jsStream, dtsStream]);
  35. });
  36. gulp.task('compileScss', function compileScss() {
  37. return gulp.src(['**/*.scss', '!**/node_modules/**/*.*', '!**/_story/**/*.scss'])
  38. .pipe(through2.obj(
  39. function (chunk, enc, cb) {
  40. const rootPath = path.join(__dirname, '../../');
  41. const scssVarStr = `@import "${rootPath}/packages/semi-theme-default/scss/index.scss";\n`;
  42. const cssVarStr = `@import "${rootPath}/packages/semi-theme-default/scss/global.scss";\n`;
  43. const scssBuffer = Buffer.from(scssVarStr);
  44. const buffers = [scssBuffer];
  45. if (/_base\/base\.scss/.test(chunk.path)) {
  46. buffers.push(Buffer.from(cssVarStr));
  47. }
  48. chunk.contents = Buffer.concat([...buffers, chunk.contents]);
  49. cb(null, chunk);
  50. }
  51. ))
  52. .pipe(sass({
  53. importer: (url, prev) => {
  54. const rootPath = path.join(__dirname, '../../');
  55. let realUrl = url;
  56. if (/~@douyinfe\/semi-foundation/.test(url)) {
  57. const semiUIPath = path.join(rootPath, 'packages/semi-foundation');
  58. realUrl = url.replace(/~@douyinfe\/semi-foundation/, semiUIPath);
  59. }
  60. return { url: realUrl };
  61. }
  62. }).on('error', sass.logError))
  63. .pipe(gulp.dest('lib/es'));
  64. });
  65. gulp.task('moveScss', function moveScss() {
  66. return gulp.src(['**/*.scss', '!**/node_modules/**/*.*', '!**/_story/**/*.scss'])
  67. .pipe(replace(/(@import\s+['"]~)(@douyinfe\/semi-foundation\/)/g, '$1@douyinfe/semi-foundation/lib/es/'))
  68. .pipe(gulp.dest('lib/es'));
  69. });
  70. gulp.task('compileLib', gulp.series(['cleanLib', 'compileScss', 'moveScss', 'compileTSX']));