Bower components builder for Grunt
Automatic concatenation of installed Bower components (JS and/or CSS) in the right order.
Installation
This plugin requires Grunt 0.4.
$ npm install grunt-bower-concat --save-dev
Configuration
Add somewhere in your Gruntfile.js
:
grunt.loadNpmTasks('grunt-bower-concat');
Inside your Gruntfile.js
file add a section named bower_concat
. See Parameters section below for details.
Options
separator
Type: String
Default: grunt.util.linefeed
Concatenated files will be joined on this string. If you're post-processing concatenated JavaScript files with a minifier, you may need to use a semicolon ';\n' as the separator. Separator is only applied to concatenated JS files.
options: { separator : ';' }
Parameters
dest
Type: Object
, required. Defines the filetypes to be concatenated into a destination file.
Where the key is the file extension (without the dot) and the value is the destination file.
E.g:
dest: {
js: 'build/_bower.js',
scss: 'build/_bower.scss',
coffee: 'build/_bower.coffee'
}
Also this version still supports this field to be a String, but this is deprecated:
(Deprecated) Type: String
, defines into which file all .js files should be concatenated.
Name of JS file where result of concatenation will be saved.
exclude
Type: String|Array
, optional.
List of components you want to exclude.
exclude: [
'jquery',
'modernizr'
]
include
Type: String|Array
, optional.
By default bower-concat will include all installed in project components. Using include
option you can manually specify which components should be included.
include: [
'underscore',
'backbone'
]
dependencies
Type: Object
, optional.
Unfortunately not all Bower components list their dependencies. If components concatenate in the wrong order, use this option to manually specify dependencies for those components.
dependencies: {
'underscore': 'jquery',
'mygallery': ['jquery', 'fotorama']
}
mainFiles
Type: Object
, optional.
Some Bower components don’t list their main files or (more likely) don’t have bower.json
file at all. In this case bower-concat
will try to guess main file but sometimes it can’t or choose wrong one. You could explicitly define main files for that components.
mainFiles: {
'svg.js': 'dist/svg.js',
'mygallery': ['src/base.js', 'src/gallery.js', 'src/style.css']
}
callback
Type: Function
, optional.
This function will be called for every Bower component and allows you to change main files chosen by bower-concat
.
callback: function(mainFiles, component) {
return _.map(mainFiles, function(filepath) {
// Use minified files if available
var min = filepath.replace(/\.js$/, '.min.js');
return grunt.file.exists(min) ? min : filepath;
});
}
process
Type: Function
, optional.
This function will be called for every Bower component and allows you to change the contents of every file.
process: function(src) {
// wrap each library in a self executing function with "use strict"
return "\n" +
";(function( window, jQuery, angular, undefined ){ \n 'use strict';\n\n" +
src +
"\n\n}( window, jQuery, angular ));";
}
bowerOptions
Type: Object
, optional.
Bower specific options that will be passed in during the bower.commands
calls.
bowerOptions: {
relative: false
}
includeDev
Type: Boolean
, default: false
.
Include devDependencies
along with regular dependencies
.
Config Example
bower_concat: {
all: {
dest: {
'js': 'build/_bower.js',
'css': 'build/_bower.css'
},
exclude: [
'jquery',
'modernizr'
],
dependencies: {
'underscore': 'jquery',
'backbone': 'underscore',
'jquery-mousewheel': 'jquery'
},
bowerOptions: {
relative: false
}
}
}
Changelog
The changelog can be found on the Releases page.
License
The MIT License, see the included License.md file.