/bower-main

Get bower main files in both normal and minimized formats (if available in package)

Primary LanguageJavaScript

bower-main

Made to be used with Gulp. Based on asset type, get bower main files as normal file names array and as minimized file names array. If no minified version is found for some files, these file names will be available as a 3rd array so you can minify them yourself. The order of the files is as set in bower.json.

It uses main-bower-files, manipulates the result and checks for the availability of a minimized version (in the bower package).

Installation

  npm install --save-dev bower-main

Usage

Require the module and get a set of asset files by giving two paramenters: First paramenter is the non-mimified file extension, like 'js' or 'css'. Second parameter (optional) is the minified file extension, like 'min.js' or 'min.css'. Here is a usage with JavaScript files:

var bowerMain = require('bower-main');
var bowerMainJavaScriptFilesObject = bowerMain('js','min.js');

var normalJavaScriptFileNamesArray           = bowerMainJavaScriptFilesObject.normal;
var minifiedJavaScriptFileNamesArray         = bowerMainJavaScriptFilesObject.minified;
var minifiedJavaScriptFileNamesNotFoundArray = bowerMainJavaScriptFilesObject.minifiedNotFound;

Minify non-minified scripts in Gulp

Again, this example uses JavaScript files.

var concat = require('gulp-concat');
var uglify = require('gulp-uglify');
var merge2 = require('merge2');
var bowerMain = require('bower-main');

var bowerMainJavaScriptFiles = bowerMain('js','min.js');

gulp.task('vendorScriptsDevelopment', function() {
  return gulp.src(bowerMainJavaScriptFiles.normal)
    .pipe(concat('vendor-scripts.js'))
    .pipe(gulp.dest('dev'))
});

gulp.task('vendorScriptsProduction', function() {
  return merge2(
    gulp.src(bowerMainJavaScriptFiles.minified),
    gulp.src(bowerMainJavaScriptFiles.minifiedNotFound)
      .pipe(concat('tmp.min.js'))
      .pipe(uglify())
  )
    .pipe(concat('vendor-scripts.min.js'))
    .pipe(gulp.dest('dist'))
});

Copy your Bower dependencies with Gulp

Assuming your Bower dependencies contain various extension files (css, js, fonts, eot, svg, etc.), it may seem heavy to select ALL the possible extensions. So, here is a sample that shows how to...

  • Copy the minified JS and CSS scripts when they exists.
  • Copy the full JS and CSS scripts when no minified version exist.
  • Copy all the other Bower dependencies (no matter their extension).
// Include our plug-ins
var bowerMain = require('bower-main');
var mainBowerFiles = require('main-bower-files');
var exists = require('path-exists').sync;
var gulpIgnore = require('gulp-ignore');

// Create some task
gulp.task( 'copy-bower-dep', function() {

	// Copy minified resources (Bower)
	gulp.src( bowerMain( 'js', 'min.js' ).minified, {base: './my-bower-components/dir'})
			.pipe( gulp.dest( './target/dist/lib' ));
	
	gulp.src( bowerMain( 'css', 'min.css' ).minified, {base: './my-bower-components/dir'})
			.pipe( gulp.dest( './target/dist/lib' ));
	
	// Copy non-minified resources (Bower)
	// Notice we filter these resources to distinguish which one are minified.
	gulp.src( mainBowerFiles(), {base: './my-bower-components/dir'})
			.pipe( gulpIgnore.include( keepNonMinified ))
			.pipe( gulp.dest( './target/dist/lib' ));
});

/*
 * A function that checks whether a Bower file has a minified version.
 */
function keepNonMinified( file ) {
	
	var keep = true;
	if( file.path.match( '\.js$' )) {
		var minPath = file.path.replace( '.js', '.min.js' );
		keep = ! exists( minPath );
		
	} else if( file.path.match( '\.css$' )) {
		var minPath = file.path.replace( '.css', '.min.css' );
		keep = ! exists( minPath );
	}
	
	// gutil.log( file.path + ' => ' + keep );
	return keep;
}

Based on this gist.

Issues

If you find a bug, have a feature request or similar, then create an issue on https://github.com/frodefi/bower-main/issues.

LICENSE

MIT © Frode Fikke