build-less.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /* eslint import/no-extraneous-dependencies: ["error", {"devDependencies": true}] */
  2. /* eslint no-console: "off" */
  3. const gulp = require('gulp');
  4. const fs = require('fs');
  5. const less = require('gulp-less');
  6. const autoprefixer = require('gulp-autoprefixer');
  7. const header = require('gulp-header');
  8. const rename = require('gulp-rename');
  9. const cleanCSS = require('gulp-clean-css');
  10. const path = require('path');
  11. const config = require('./build-config.js');
  12. const banner = require('./banner.js');
  13. function build(cb) {
  14. const env = process.env.NODE_ENV || 'development';
  15. const components = [];
  16. config.components.forEach((name) => {
  17. const lessFilePath = `./src/components/${name}/${name}.less`;
  18. if (fs.existsSync(lessFilePath)) {
  19. components.push(name);
  20. }
  21. });
  22. const colors = [];
  23. Object.keys(config.colors).forEach((key) => {
  24. colors.push(`${key} ${config.colors[key]}`);
  25. });
  26. let lessContent = fs.readFileSync(path.resolve(__dirname, '../src/swiper.less'), 'utf8');
  27. lessContent = lessContent
  28. .replace('//IMPORT_COMPONENTS', components.map((component) => `@import url('./components/${component}/${component}.less');`).join('\n'))
  29. .replace('$themeColor', config.themeColor)
  30. .replace('$colors', colors.join(', '));
  31. fs.writeFileSync(path.resolve(__dirname, '../src/swiper-temp.less'), lessContent);
  32. gulp.src('./src/swiper-temp.less')
  33. .pipe(less({
  34. javascriptEnabled: true,
  35. }))
  36. .on('error', (err) => {
  37. if (cb) cb();
  38. console.error(err.toString());
  39. })
  40. .pipe(autoprefixer({
  41. cascade: false,
  42. }))
  43. .on('error', (err) => {
  44. if (cb) cb();
  45. console.error(err.toString());
  46. })
  47. .pipe(header(banner))
  48. .pipe(rename((filePath) => {
  49. /* eslint no-param-reassign: ["error", { "props": false }] */
  50. filePath.basename = 'swiper';
  51. }))
  52. .pipe(gulp.dest(`./${env === 'development' ? 'build' : 'dist'}/css/`))
  53. .on('end', () => {
  54. fs.unlinkSync(path.resolve(__dirname, '../src/swiper-temp.less'));
  55. if (env === 'development') {
  56. if (cb) cb();
  57. return;
  58. }
  59. gulp.src('./dist/css/swiper.css')
  60. .pipe(cleanCSS({
  61. advanced: false,
  62. aggressiveMerging: false,
  63. }))
  64. .pipe(header(banner))
  65. .pipe(rename((filePath) => {
  66. /* eslint no-param-reassign: ["error", { "props": false }] */
  67. filePath.basename += '.min';
  68. }))
  69. .pipe(gulp.dest('./dist/css/'))
  70. .on('end', () => {
  71. if (cb) cb();
  72. });
  73. });
  74. }
  75. module.exports = build;