Closed phated closed 11 years ago
as far as I know, yes, bowerrc can config where we want our packages installed, but Bower installs the whole package.
say, bower install underscore
, we will get 31 files, but what we really need is only underscore.js
.
and that's where this little plugin comes in handy
Makes sense, but maybe this should be renamed, as bower is relatively easy to implement as grunt tasks and this task doesn't expose any of the API.
After a quick reevaluation, I can't really see which/why Bower's API to expose might be useful. Bower's commands are for one shot thing, excute, and done, I don't think any of the commands will be suitable in a grunt automated task.
But that's only my opinion, would you mind to come up a reason or two which/why Bower's API could be useful if it's exposed?
I'd admit that, this task could be misleading for what it actually does. If there are any better use case for a task named grunt-bower
, changing this task's name sure be a good idea.
Yeoman and a tool I am working on Grunt-Enyo expose bower through their CLI and both do it through a grunt task. Also, I believe that being able to call grunt.task.run() inside of other tasks to kick off a bower task is better than shelling out or having to implement the API each time it is needed.
// bower command wrapper
function bower_wrapper(cmd, done) {
// pull in the bower command module
var command = bower.commands[cmd];
// run
command.line(process.argv)
.on('error', grunt.fatal.bind(grunt.fail))
.on('data', grunt.log.writeln.bind(grunt.log))
.on('end', function(){
done();
});
}
// register bower commands as grunt tasks
Object.keys(bower.commands).forEach(function(cmd) {
var task_name = 'bower:' + cmd
, task_desc = 'wrapped bower ' + cmd + 'command.';
grunt.registerTask(task_name, task_desc, function() {
var done = this.async();
bower_wrapper(cmd, done);
});
});
Modified from Yeoman's bower task, Bower's commands wrapped as Grunt tasks, with < 30 LOC.
It may be convenient to have these API when working on a framework like Yeoman and Grunt-Enyo, but, just look around other grunt tasks, I don't think this is the way a grunt task should be.
Sure I can plug-in the above codes, but it just doesn't feel right.
bower now accepts a .bowerrc file to configure the directory that packages get installed in.