Amber
Amber

Reputation: 465

Ordening files in Grunt with external file

I'm configuring Grunt with grunt-contrib-concat to concatenate like 20 javascript files. They have to be in a specific order and I'm wondering if there is a neat way to do this, without messing up my Gruntfile.js.

What I did and what worked well, was declaring an variable called 'libraries' with a function which returned a string with all the files in the right order.

var libraries = new (function () {

    return [

        '/javascript/libs/jquery.min.js',
        '/javascript/libs/jquery.address.js',
        '/javascript/libs/jquery.console.js'

    ];

});

And then concat (simplified, just an example):

concat: {
    libs: {
        files: {
            'libs.js' : [libraries],                
        },
    },
    main: {
        files: {
            'main.js' : [main]
        }
    }   
},

So when I call 'libraries' in my task configuration everything works fine, but I would like to declare this list in a separate file. Unfortunately I couldn't find anything, nor do I know if this is even possible. Hope that someone could help me out! Thanks in advance :-)

Upvotes: 2

Views: 181

Answers (1)

Amber
Amber

Reputation: 465

I found a solution! Since Grunt is build on NodeJS, it's possible to use module.exports. What I did was setting an external file called libraries.js, which is in my Grunt directory.

var exports = module.exports = {};

exports.customLibrary = function () {

    return [

        // Path to a library
        // Path to another library
        // and so on...

    ];

};

exports.mainScripts = function () { 

    return [

        // Path to a library
        // Path to another library
        // and so on...

    ];

};

Then I import this module by declaring a variable in Gruntfile.js

var libraries                   = require('../javascript/libraries.js');

To use the methods declared in libraries.js I set two more variables which returns a string with all the necessary files in the desired order:

var customLibrary               = libraries.customLibrary();
var mainScripts                 = libraries.mainScripts();

I use these variables to define the source in the concat task. Hope this is helpful!

Upvotes: 1

Related Questions