-
-
Save thomasboyt/6406507 to your computer and use it in GitHub Desktop.
| module.exports = { | |
| options: { | |
| separator: ';' | |
| }, | |
| dist: { | |
| src: ['src/**/*.js'], | |
| dest: 'dist/<%= pkg.name %>.js' | |
| } | |
| } |
| module.exports = function(grunt) { | |
| grunt.registerTask('helloWorld', 'Say hello!', function() { | |
| grunt.log.writeln("Hello world!"); | |
| }); | |
| }; |
| function loadConfig(path) { | |
| var glob = require('glob'); | |
| var object = {}; | |
| var key; | |
| glob.sync('*', {cwd: path}).forEach(function(option) { | |
| key = option.replace(/\.js$/,''); | |
| object[key] = require(path + option); | |
| }); | |
| return object; | |
| } |
| var config = { | |
| pkg: grunt.file.readJSON('package.json'), | |
| env: process.env | |
| }; | |
| grunt.util._.extend(config, loadConfig('./tasks/options/')); | |
| grunt.initConfig(config); |
| require('load-grunt-tasks')(grunt); |
| grunt.loadNpmTasks('grunt-contrib-uglify'); | |
| grunt.loadNpmTasks('grunt-contrib-jshint'); | |
| grunt.loadNpmTasks('grunt-contrib-qunit'); | |
| grunt.loadNpmTasks('grunt-contrib-watch'); | |
| grunt.loadNpmTasks('grunt-contrib-concat'); |
| grunt.loadTasks('tasks'); |
| module.exports = function(grunt) { | |
| grunt.initConfig({ | |
| pkg: grunt.file.readJSON('package.json'), | |
| concat: { | |
| options: { | |
| separator: ';' | |
| }, | |
| dist: { | |
| src: ['src/**/*.js'], | |
| dest: 'dist/<%= pkg.name %>.js' | |
| } | |
| }, | |
| uglify: { | |
| options: { | |
| banner: '/*! <%= pkg.name %> <%= grunt.template.today("dd-mm-yyyy") %> */\n' | |
| }, | |
| dist: { | |
| files: { | |
| 'dist/<%= pkg.name %>.min.js': ['<%= concat.dist.dest %>'] | |
| } | |
| } | |
| }, | |
| qunit: { | |
| files: ['test/**/*.html'] | |
| }, | |
| jshint: { | |
| files: ['gruntfile.js', 'src/**/*.js', 'test/**/*.js'], | |
| options: { | |
| // options here to override JSHint defaults | |
| globals: { | |
| jQuery: true, | |
| console: true, | |
| module: true, | |
| document: true | |
| } | |
| } | |
| }, | |
| watch: { | |
| files: ['<%= jshint.files %>'], | |
| tasks: ['jshint', 'qunit'] | |
| } | |
| }); | |
| grunt.loadNpmTasks('grunt-contrib-uglify'); | |
| grunt.loadNpmTasks('grunt-contrib-jshint'); | |
| grunt.loadNpmTasks('grunt-contrib-qunit'); | |
| grunt.loadNpmTasks('grunt-contrib-watch'); | |
| grunt.loadNpmTasks('grunt-contrib-concat'); | |
| grunt.registerTask('test', ['jshint', 'qunit']); | |
| grunt.registerTask('default', ['jshint', 'qunit', 'concat', 'uglify']); | |
| }; |
Would somebody mind elaborating a bit on the grunt.loadTasks('tasks'); line please..?
I found this section in the official docs, but it doesn't give any explanation of how the files inside said 'tasks' folder should be structured. Simply moving my custom tasks into a tasks/example.js file doesn't seem to work. :/
Shameful edit: Uh, so I just noticed the example I couldn't find is already covered in the example_task.js file. Apologies.. :)
Only one question. I have something like this:
module.exports = {
options: function(path){
//do something with path
}
}
I want path to be a property of the config object, and use it here. Is it possible? I mean:
var config = {
pkg: grunt.file.readJSON('package.json'),
env: process.env,
path: "/dir1/dir2"
};
Is that possible?
A question from me too:
example_task.js - my task calls other tasks:
module.exports = function(grunt) {
grunt.registerTask('styleguide', function() {
'string-replace:styleguide',
'clean:styleguide_data',
'copy:styleguide',
'kss', // note: kss:styleguide fails here, otherwise I would use this convention for consistency
'clean:styleguide_data_public'
});
};
If i enable the --verbose flag I can see that my styleguide task is registered, as are my other tasks listed in the options folder.
...
Registering "grunt-string-replace" local Npm module tasks.
Reading /Users/Dan/Websites/xxx/trunk/htdocs/sites/all/themes/xxx/node_modules/grunt-string-replace/package.json...OK
Parsing /Users/Dan/Websites/xxx/trunk/htdocs/sites/all/themes/xxx/node_modules/grunt-string-replace/package.json...OK
Loading "string-replace.js" tasks...OK
+ string-replace
Registering "tasks" tasks.
Loading "styleguide_task.js" tasks...OK
+ styleguide
Reading package.json...OK
Parsing package.json...OK
Initializing config...OK
Loading "Gruntfile.js" tasks...OK
>> No tasks were registered or unregistered.
However no styleguide is generated.
Is it possible to run the tasks in the way I have been doing? Or can you suggest another way?
Thanks.
Ah, my bad, the syntax I wanted (and had, until I copied your code without thinking) was:
module.exports = function(grunt) {
grunt.registerTask('styleguide', [
'string-replace:styleguide',
'clean:styleguide_data',
'copy:styleguide',
'kss', // note: kss:styleguide fails here, otherwise I would use this convention for consistency
'clean:styleguide_data_public'
]);
};
Cheers.
I have one other question:
Some of my grunts are fairly detailed to set up. So I plan to have them on Github so I can pull them down without having to remember how to set them up.
Is it possible to adapt the script to have a separate options folder for each task, or to append the grunt name to the task filename?
styleguide_task.js
|- clean_styleguide.js
|- copy_styleguide.js
Then I could just merge the existing tasks and options folder when importing my preconfigured ones.
Note that I might want to have several grunts using the same tasks (copy being used one way for one grunt and another way for a different grunt).
Thanks.
I think this tutorial could be improved by including a repository that shows the directory layout.
I'm familiar with Grunt, but following the step-by-step instructions, I somehow missed wrapping my Gruntfile.js in a module.exports. Maybe complete files would help.
Other than that, this was very helpful! Thank you for putting this together.
For reference:
npm install -D globon your project should do it. Thanks guys.