You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							118 lines
						
					
					
						
							3.9 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							118 lines
						
					
					
						
							3.9 KiB
						
					
					
				| var gulp = require('gulp') | |
| var $ = require('gulp-load-plugins')() | |
| var fs = require('fs') | |
| var path = require('path') | |
| var del = require('del') | |
| // var colors = require('colors') | |
| var child_process = require('child_process') | |
| 
 | |
| var theme = {} | |
| var themeList = require('./src/element-ui/config.js').filter( | |
|   (item) => !item.hasBuild | |
| ) | |
| var styleFileDir = './src/assets/scss' | |
| var styleFileDirTemp = `${styleFileDir}-temp` | |
| var themeFileDir = './public/element-theme' | |
| var et = require('element-theme') | |
| var etOptions = require('./package.json')['element-theme'] | |
| var themeFileName = etOptions.config.replace(/.*\/(.+\.scss)/, '$1') | |
| 
 | |
| /** | |
|  * 构建生成主题 | |
|  */ | |
| gulp.task('themes', () => { | |
|   // console.log(colors.green('-------------------- 构建中,主题============= -------------------------')) | |
|   if (themeList.length <= 0) { | |
|     return del(styleFileDirTemp) | |
|   } | |
| 
 | |
|   // 删除临时文件,保证本次操作正常执行 | |
|   // del(styleFileDirTemp) | |
|  | |
|   // 拷贝一份scss样式文件夹,作为构建的临时处理文件夹 | |
|   // child_process.spawnSync('cp', ['-r', styleFileDir, styleFileDirTemp]) | |
|  | |
|   // 拷贝element组件scss变量样式文件至临时处理文件夹中,并修改相应配置信息 | |
|   // child_process.spawnSync('cp', ['-r', etOptions.config, styleFileDirTemp]) | |
|   etOptions.config = `${styleFileDirTemp}/${themeFileName}` | |
| 
 | |
|   // 开始构建生成 | |
|   fnCreate(themeList) | |
| 
 | |
|   function fnCreate(themeList) { | |
|     if (themeList.length >= 1) { | |
|       // 保存当前构建生成的主题对象 | |
|       theme = themeList[0] | |
| 
 | |
|       console.log('\n') | |
|       // console.log(colors.green('-------------------- 待构建,主题 -------------------------')) | |
|       console.log(themeList) | |
|       console.log('\n') | |
|       // console.log(colors.green('-------------------- 构建中,主题 -------------------------')) | |
|       console.log(theme) | |
|       console.log('\n') | |
| 
 | |
|       // 修改.scss临时文件中的$--color-primary主题变量值 | |
|       var data = fs.readFileSync(etOptions.config, 'utf8') | |
|       var result = data.replace( | |
|         /\$--color-primary:(.*) !default;/, | |
|         `$--color-primary:${theme.color} !default;` | |
|       ) | |
|       fs.writeFileSync(path.resolve(etOptions.config), result) | |
| 
 | |
|       // 修改aui.scss临时文件中引入element组件主题变量文件路径 | |
|       var data = fs.readFileSync(`${styleFileDirTemp}/aui.scss`, 'utf8') | |
|       var result = data.replace( | |
|         // eslint-disable-next-line no-useless-escape | |
|         new RegExp(`(@import \")(.*\/)(${themeFileName}\";)`), | |
|         '$1./$3' | |
|       ) | |
|       fs.writeFileSync(path.resolve(`${styleFileDirTemp}/aui.scss`), result) | |
| 
 | |
|       // 调用element-theme插件,生成element组件主题 | |
|       etOptions.out = `${themeFileDir}/${theme.name}` | |
|       et.run(etOptions, () => { | |
|         // 生成后,构建同主题色aui.css项目主题 | |
|         gulp.start(['styles'], () => { | |
|           // 递归下一步 | |
|           themeList.splice(0, 1) | |
|           fnCreate(themeList) | |
|         }) | |
|       }) | |
|     } else { | |
|       // 删除临时文件 | |
|       del(styleFileDirTemp) | |
|       console.log('\n') | |
|       // console.log(colors.green('-------------------- 构建完毕,删除临时文件 -------------------------')) | |
|       console.log(styleFileDirTemp) | |
|       console.log('\n') | |
| 
 | |
|       // 删除主题不需要的部分文件 | |
|       var files = [ | |
|         `${themeFileDir}/**/*.css`, | |
|         `!${themeFileDir}/**/index.css`, | |
|         `!${themeFileDir}/**/aui.css`, | |
|         `!${themeFileDir}/**/fonts`, | |
|       ] | |
|       del(files) | |
|       // console.log(colors.green('-------------------- 构建完毕,删除主题独立组件文件 -------------------------')) | |
|       console.log(files) | |
|       console.log('\n') | |
|     } | |
|   } | |
| }) | |
| 
 | |
| gulp.task('styles', () => { | |
|   return gulp | |
|     .src([`${styleFileDirTemp}/aui.scss`]) | |
|     .pipe($.sass().on('error', $.sass.logError)) | |
|     .pipe( | |
|       $.autoprefixer({ | |
|         browsers: etOptions.browsers, | |
|         cascade: false, | |
|       }) | |
|     ) | |
|     .pipe($.cleanCss()) | |
|     .pipe($.rename('aui.css')) | |
|     .pipe(gulp.dest(`${themeFileDir}/${theme.name}`)) | |
| })
 | |
| 
 |