16/02/2014 Development / grunt

Essa semana eu fiz o arquivo que gera todas as tarefas do SIO, como:

Minificar e gerar o js;
Buildar todos os arquivos sass, minificar;
Gerar o pacote;

O arquivo ficou mais ou menos assim:

 module.exports = function(grunt) {

 // Project configuration.
 grunt.initConfig({
   pkg: grunt.file.readJSON('package.json'),

    /* 1- Minifica o js */
    /****************************************************************************/
    uglify: {
     options: {
       compress: true,
       banner: '/*! <%= pkg.name %> - <%= pkg.author %> - <%= grunt.template.today("yyyy-mm-dd") %> */\n'
     },
     build: {
       src: 'Core/js/funcoes.js',
       dest: 'Core/js/funcoes.min.js'
     }
    },


    /* 2- Testa o js */
    /****************************************************************************/
    jshint: {
      ignore_warning: {
          options: {
              '-W061': true,
              '-W030': true
          },
          src: ['Core/js/funcoes.js'],
      }
    },   

    /* 3-  Gera e Minifica todos os css .scss */
    /****************************************************************************/
    sass: {
        dist: {
            options: {
                outputStyle: 'compressed'
            },
            files: [{
        expand: true,
        src: ['Core/**/*.scss'],
        ext: '.css'
        }]
      }
    },

    /* 4- Copia todos os arquivos pra pasta build target */
    /****************************************************************************/
    copy: {
        main: {
            expand: true,
            cwd: 'Core/',
            src: ['**'],
            dest: 'build/'
        },

        /* 4-2 Copia apenas a pasta do meu projeto em execucao para a pasta build */
        /****************************************************************************/
        my_build:{
            expand: true,
            cwd: 'Core/css/appThemes/' + grunt.option('target'),
            src: ['**'],
            dest: 'build/css/appThemes/' + grunt.option('target')
          }
    },

    /* Apaga os themas desnecessarios */
    /****************************************************************************/
    clean: {
      build : {
        src : ["build/css/appThemes","build/imagens/png","build/css/componentes","build/css/*.scss","build/js/funcoes.js"]
      },
      my_build : {
       src : ["build/css/appThemes/" + grunt.option('target') + "/css/estilo.scss"] 
      },
      init : {
       src : ["build"] 
      }
    },


    /* Fica escutando alteracoes nos arquivos */
    /****************************************************************************/
    watch: {
        options: {
            livereload: 1337,
        },
        scripts: {
            files: ['Core/**/*.js'],
            tasks: ['build']
        },
        css: {
            files: ['Core/**/*.css'],
            tasks: ['build']
        }
    }
 });

// Load the plugin that provides the "uglify" task.
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-sass');

 // Default task(s).
 grunt.registerTask('build', ['clean:init','uglify','jshint','sass','copy','clean:build','copy:my_build','clean:my_build']);
 grunt.registerTask('default', ['watch']);
};

 

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']);
}