forked from EVOgeek/Vmeda.Online
		
	Merge pull request #1914 from crazyserver/MOBILE-3031
MOBILE-3031 gulp: Add combine scss task
This commit is contained in:
		
						commit
						e7bda47d7b
					
				
							
								
								
									
										132
									
								
								gulpfile.js
									
									
									
									
									
								
							
							
						
						
									
										132
									
								
								gulpfile.js
									
									
									
									
									
								
							| @ -8,6 +8,8 @@ var gulp = require('gulp'), | |||||||
|     gutil = require('gulp-util'), |     gutil = require('gulp-util'), | ||||||
|     flatten = require('gulp-flatten'), |     flatten = require('gulp-flatten'), | ||||||
|     npmPath = require('path'), |     npmPath = require('path'), | ||||||
|  |     concat = require('gulp-concat'), | ||||||
|  |     bufferFrom = require('buffer-from') | ||||||
|     File = gutil.File, |     File = gutil.File, | ||||||
|     exec = require('child_process').exec, |     exec = require('child_process').exec, | ||||||
|     license = '' + |     license = '' + | ||||||
| @ -113,7 +115,7 @@ function treatMergedData(data) { | |||||||
|         mergedOrdered[k] = merged[k]; |         mergedOrdered[k] = merged[k]; | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     return new Buffer(JSON.stringify(mergedOrdered, null, 4)); |     return bufferFrom(JSON.stringify(mergedOrdered, null, 4)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
| @ -257,7 +259,7 @@ gulp.task('config', function(done) { | |||||||
| 
 | 
 | ||||||
|                 contents += '}\n'; |                 contents += '}\n'; | ||||||
| 
 | 
 | ||||||
|                 file.contents = new Buffer(contents); |                 file.contents = bufferFrom(contents); | ||||||
|                 this.emit('data', file); |                 this.emit('data', file); | ||||||
|             })) |             })) | ||||||
|             .pipe(rename('configconstants.ts')) |             .pipe(rename('configconstants.ts')) | ||||||
| @ -296,3 +298,129 @@ gulp.task('copy-component-templates', function(done) { | |||||||
|         .on('end', done); |         .on('end', done); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
|  | /** | ||||||
|  |  * Finds the file and returns its content. | ||||||
|  |  * | ||||||
|  |  * @param  {string} capture     Import file path. | ||||||
|  |  * @param  {string} baseDir     Directory where the file was found. | ||||||
|  |  * @param  {string} paths       Alternative paths where to find the imports. | ||||||
|  |  * @param  {Array} parsedFiles  Yet parsed files to reduce size of the result. | ||||||
|  |  * @return {string}             Partially combined scss. | ||||||
|  |  */ | ||||||
|  | function getReplace(capture, baseDir, paths, parsedFiles) { | ||||||
|  |     var parse   = path.parse(path.resolve(baseDir, capture + '.scss')); | ||||||
|  |     var file    = parse.dir + '/' + parse.name; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     if (!fs.existsSync(file + '.scss')) { | ||||||
|  |         // File not found, might be a partial file.
 | ||||||
|  |         file    = parse.dir + '/_' + parse.name; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     // If file still not found, try to find the file in the alternative paths.
 | ||||||
|  |     var x = 0; | ||||||
|  |     while (!fs.existsSync(file + '.scss') && paths.length > x) { | ||||||
|  |         parse   = path.parse(path.resolve(paths[x], capture + '.scss')); | ||||||
|  |         file    = parse.dir + '/' + parse.name; | ||||||
|  | 
 | ||||||
|  |         x++; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     file    = file + '.scss'; | ||||||
|  | 
 | ||||||
|  |     if (!fs.existsSync(file)) { | ||||||
|  |         // File not found. Leave the import there.
 | ||||||
|  |         console.log('File "' + capture + '" not found'); | ||||||
|  |         return '@import "' + capture + '";'; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     if (parsedFiles.indexOf(file) >= 0) { | ||||||
|  |         console.log('File "' + capture + '" already parsed'); | ||||||
|  |         // File was already parsed, leave the import commented.
 | ||||||
|  |         return '// @import "' + capture + '";'; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     parsedFiles.push(file); | ||||||
|  |     var text = fs.readFileSync(file); | ||||||
|  | 
 | ||||||
|  |     // Recursive call.
 | ||||||
|  |     return scssCombine(text, parse.dir, paths, parsedFiles); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Combine scss files with its imports | ||||||
|  |  * | ||||||
|  |  * @param  {string} content     Scss string to read. | ||||||
|  |  * @param  {string} baseDir     Directory where the file was found. | ||||||
|  |  * @param  {string} paths       Alternative paths where to find the imports. | ||||||
|  |  * @param  {Array} parsedFiles  Yet parsed files to reduce size of the result. | ||||||
|  |  * @return {string}             Scss string with the replaces done. | ||||||
|  |  */ | ||||||
|  | function scssCombine(content, baseDir, paths, parsedFiles) { | ||||||
|  | 
 | ||||||
|  |     // Content is a Buffer, convert to string.
 | ||||||
|  |     if (typeof content != "string") { | ||||||
|  |         content = content.toString(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     // Search of single imports.
 | ||||||
|  |     var regex = /@import[ ]*['"](.*)['"][ ]*;/g; | ||||||
|  | 
 | ||||||
|  |     if (regex.test(content)) { | ||||||
|  |         return content.replace(regex, function(m, capture) { | ||||||
|  |             if (capture == "bmma") { | ||||||
|  |                 return m; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             return getReplace(capture, baseDir, paths, parsedFiles); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     // Search of multiple imports.
 | ||||||
|  |     regex = /@import(?:[ \n]+['"](.*)['"][,]?[ \n]*)+;/gm; | ||||||
|  |     if (regex.test(content)) { | ||||||
|  |         return content.replace(regex, function(m, capture) { | ||||||
|  |             var text = ""; | ||||||
|  | 
 | ||||||
|  |             // Divide the import into multiple files.
 | ||||||
|  |             regex = /['"]([^'"]*)['"]/g; | ||||||
|  |             var captures = m.match(regex); | ||||||
|  |             for (var x in captures) { | ||||||
|  |                 text += getReplace(captures[x].replace(/['"]+/g, ''), baseDir, paths, parsedFiles) + "\n"; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             return text; | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return content; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | gulp.task('combine-scss', function(done) { | ||||||
|  |     var paths = [ | ||||||
|  |         'node_modules/ionic-angular/themes/', | ||||||
|  |         'node_modules/font-awesome/scss/', | ||||||
|  |         'node_modules/ionicons/dist/scss/' | ||||||
|  |     ]; | ||||||
|  | 
 | ||||||
|  |     var parsedFiles = []; | ||||||
|  | 
 | ||||||
|  |     gulp.src([ | ||||||
|  |             './src/theme/variables.scss', | ||||||
|  |             './node_modules/ionic-angular/themes/ionic.globals.*.scss', | ||||||
|  |             './node_modules/ionic-angular/themes/ionic.components.scss', | ||||||
|  |             './src/**/*.scss'])  // define a source files
 | ||||||
|  |         .pipe(through(function(file, encoding, callback) { | ||||||
|  |             if (file.isNull()) { | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             parsedFiles.push(file); | ||||||
|  |             file.contents = bufferFrom(scssCombine(file.contents, path.dirname(file.path), paths, parsedFiles)); | ||||||
|  | 
 | ||||||
|  |             this.emit('data', file); | ||||||
|  |         }))   // combine them based on @import and save it to stream
 | ||||||
|  |         .pipe(concat('combined.scss')) // concat the stream output in single file
 | ||||||
|  |         .pipe(gulp.dest('.'))  // save file to destination.
 | ||||||
|  |         .on('end', done); | ||||||
|  | }); | ||||||
|  | |||||||
							
								
								
									
										20
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										20
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @ -2520,6 +2520,15 @@ | |||||||
|         "typedarray": "^0.0.6" |         "typedarray": "^0.0.6" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "concat-with-sourcemaps": { | ||||||
|  |       "version": "1.1.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", | ||||||
|  |       "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "source-map": "^0.6.1" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "console-browserify": { |     "console-browserify": { | ||||||
|       "version": "1.1.0", |       "version": "1.1.0", | ||||||
|       "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", |       "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", | ||||||
| @ -5867,6 +5876,17 @@ | |||||||
|         "through2": "~2.0.1" |         "through2": "~2.0.1" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "gulp-concat": { | ||||||
|  |       "version": "2.6.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz", | ||||||
|  |       "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "concat-with-sourcemaps": "^1.0.0", | ||||||
|  |         "through2": "^2.0.0", | ||||||
|  |         "vinyl": "^2.0.0" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "gulp-flatten": { |     "gulp-flatten": { | ||||||
|       "version": "0.4.0", |       "version": "0.4.0", | ||||||
|       "resolved": "https://registry.npmjs.org/gulp-flatten/-/gulp-flatten-0.4.0.tgz", |       "resolved": "https://registry.npmjs.org/gulp-flatten/-/gulp-flatten-0.4.0.tgz", | ||||||
|  | |||||||
| @ -125,6 +125,7 @@ | |||||||
|     "electron-rebuild": "^1.8.1", |     "electron-rebuild": "^1.8.1", | ||||||
|     "gulp": "^4.0.0", |     "gulp": "^4.0.0", | ||||||
|     "gulp-clip-empty-files": "^0.1.2", |     "gulp-clip-empty-files": "^0.1.2", | ||||||
|  |     "gulp-concat": "^2.6.1", | ||||||
|     "gulp-flatten": "^0.4.0", |     "gulp-flatten": "^0.4.0", | ||||||
|     "gulp-rename": "^1.3.0", |     "gulp-rename": "^1.3.0", | ||||||
|     "gulp-slash": "^1.1.3", |     "gulp-slash": "^1.1.3", | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user