29/01/2014 Development / grunt

Fiz esse scriptzinho para ler um json de plugins de colocar os arquivos em cada marca de e-commerce. Serve para o submarino, shoptime, americanas e soubarato.

A ideia é seguinte

Estrutura das pastas

- acom
- soub
- shop
- suba
- plugins
 -- slider
 -- superzoom
 -- etc...
 -- config.js
 -- gruntfile.js

Arquivo config.js

{
    "superzoom": ["acom","soub"],
    "validate": ["acom"],
    "carouFredSel":["acom"],
    "mustache":["acom"],
    "jquery":["acom"]
}

Arquivo Gruntfile.js

module.exports = function(grunt) {

    /* Carrega todos os mapeamentos de tarefas */
    require("matchdep").filterDev("grunt-*").forEach(grunt.loadNpmTasks);

    // configuração do projeto
    grunt.initConfig({

        watch : {
            scripts: {
            files: ['**/*.js'],
            tasks: ['copy_plugins'],
            options: {
              spawn: false,
            },
          },
        }
    }); /* fim do initConfig */


    /* Registra a tarefa */
    grunt.registerTask('copy_plugins', 'Copia de Plugins', function(){

        /* Deleta todas as pastas da pasta vendor de determinada MARCA */
        var marcas = ['acom','suba','soub','shop'];

        for (var i = 0; i<marcas.length; i++) {
            grunt.file.delete("../" + marcas[i] + "/catalog/app/scripts/vendor/",{
                force:true
            })
        }

        /* Leitura do Json config.js */
        var config = grunt.file.readJSON('config.js', {
            encoding: 'utf-8'
        });

        /* Parse dos Plugins */
        var plugins = Object.keys(config);

        var pluginsLenght = plugins.length,
            plugin,
            pluginName,
            marcas;

        /* Itera sobre os plugin existentes no arquivos de configuracao */
        for (var i = 0; i<pluginsLenght; i++) {

            console.log("**************************** Plugin " + i + "*******************************");

            pluginName = plugins[i];
            marcas = config[pluginName];

            console.log("Nome: " + pluginName);
            console.log("Marcas: " + marcas);

            var srcpath = pluginName + "/*.js";
            var files = grunt.file.expand({cwd: srcpath});

            var marcasLenght = marcas.length,
                marca;

            /* Itera sobre os arquivos existentes na pasta do Plugin */
            grunt.file.recurse(pluginName, function(abspath, rootdir, subdir, filename){

                /* Itera sobre as marcas que o plugin vai existir */
                for (var x = marcasLenght - 1; x >= 0; x--) {
                    
                    marca = marcas[x];

                    var destpath = "../" + marca + "/catalog/app/scripts/vendor/" + pluginName + "/";

                    if(!grunt.file.isDir(destpath)){
                        console.log("O diretorio " + destpath + " foi criado com sucesso.");
                        grunt.file.mkdir(destpath);
                    }

                    var filepath = pluginName+"/"+filename;
                    var filedest = destpath+"/"+filename;

                    grunt.file.copy(filepath, filedest);
                }
            })

            console.log("\n");
        }
    });

    /* Registra a tarefa default */
    grunt.registerTask('default', ['watch']);
}