grunt-run-once v1.0.0
grunt-run-once
Run a particular task only once
Getting Started
This plugin requires Grunt ~0.4.5
If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:
npm install grunt-run-once --save-devOnce the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:
grunt.loadNpmTasks('grunt-run-once');What's it do?
Add run-once: to the beginning of your Grunt tasks to have it only
run once. Let's say you have something like:
grunt.registerTask('default', [
// compile different types of assets
'compile:css',
'compile:js',
// ...
// make sure everything is still good:
'test',
]);
grunt.registerTask('test', [
// if `grunt test` is called directly, we need to make sure
// the sources are compiled before running the tests:
'compile:css',
'compile:js',
// ok, now run the tests
'test:run-tests',
]);
grunt.registerTask('release', [
'default',
'compile:release',
]);As you can see, running anything other than grunt test will recompile the
assets twice. This can be a lengthy step and will unnecessarily inflate your
build times. Wouldn't it be nice if you could do:
grunt.registerTask('default', [
// compile different types of assets
'run-once:compile:css',
'run-once:compile:js',
// ...
// make sure everything is still good:
'test',
]);
grunt.registerTask('test', [
// if `grunt test` is called directly, we need to make sure
// the sources are compiled before running the tests:
'run-once:compile:css',
'run-once:compile:js',
// ok, now run the tests
'run-once:test:run-tests',
]);
grunt.registerTask('release', [
'default',
'run-once:compile:release',
]);Well, now you can. As Gruntfiles get more complicated and have more entry
points, at some point, you need to be able to think about pruning redundant
steps. This approach is more a hack than a comprehensive solution.
Future Ideas
grunt.task.*helper functions analogous to PHP'srequire()andrequire_once().- JSON based task list with some way to explicitly list prerequisite tasks.
- Add actual tests.
Contributing
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using Grunt.
Release History
0.2.1- Update and redd up documentation0.2.0- First version that was used in a production environment.