Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Deploy com arquivos apenas necessários

Se alguém poder ajudar, segui os exemplos do Alura. Notei quando faço o deploy do projeto (grunt) ele copia todos os arquivos da pasta public para a pasta dist. Com o usemin ele minifica e concatena os arquivos de javascript e css. Até ai ok.

Examinando a pasta criada dist/css e dist/js temos os arquivos versionados e minificados, mas temos os arquivos originais (CSS e JS).

Como poderia copiar apenas os arquivos versionados e minificados sem copiar os arquivos originais para a página dist?

Tentei mudar a ordem da registerTask, com a Task copy mas ela é necessária para o useminPrepare

   grunt.registerTask('default', [
         'clean',
         'copy', <==
         'useminPrepare',
         'concat',
         'cssmin',
         'uglify',
         'rev',
         'usemin',
         'imagemin'
         ]);

Alguém tem uma solução? Usei o GruntFile.js usado como exemplo no Alura.

module.exports = function(grunt) {

   grunt.initConfig({
      /* Copia os arquivos para o diretório 'dist' */
      copy: {
         public: {
           expand: true,
           cwd: 'public',
           src: '**',
           dest: 'dist'
         }
     },

     clean: {
          dist: {
              src: 'dist'
          }
     },

     useminPrepare: {
       html: 'dist/**/*.html'
     },

     usemin: {
       html: 'dist/**/*.html'
     }, 

     imagemin: {
      public: {
        expand: true,
        cwd: 'dist/img',
        src: '**/*.{png,jpg,gif}',
        dest: 'dist/img'
      }
    }, 

    rev: {
      options: {
        encoding: 'utf8',
        algorithm: 'md5',
        length: 8
      },

      imagens: {
        src: ['dist/img/**/*.{png,jpg,gif}']
      },
      minificados: {
        src: ['dist/js/**/*.min.js', 'dist/css/**/*.min.css']
      }
    }, 

    coffee: {
      compilar: { 
        expand: true,
        cwd: 'public/coffee', 
        src: ['**/*.coffee'],
        dest: 'public/js', 
        ext: '.js'
      }
    },

    less: {
      compilar: {
        expand: true,
        cwd: 'public/less',
        src: ['**/*.less'],
        dest: 'public/css', 
        ext: '.css'
      }
    }, 

    watch: {
      coffee: {
        options: {
          event: ['added', 'changed']
        },
        files: 'public/coffee/**/*.coffee',
        tasks: 'coffee:compilar'
      },

      less: {
        options: {
          event: ['added', 'changed']
        },
        files: 'public/less/**/*.less', 
        tasks: 'less:compilar'
      },

      js: {
        options: {
          event: ['changed']
        },
        files: 'public/js/**/*.js',
        tasks: 'jshint:js'
      }
    }, 

    jshint: {
      js: {
        src: ['public/js/**/*.js']
      }
    }

  });

  //registrando task para minificação

  grunt.registerTask('dist', ['clean', 'copy']);

  grunt.registerTask('minifica', ['useminPrepare', 
                                  'concat', 'uglify', 'cssmin', 'rev:imagens','rev:minificados', 'usemin', 'imagemin']);

  // registrando tasks
  grunt.registerTask('default', ['dist', 'minifica', ]);

  // carregando tasks
  grunt.loadNpmTasks('grunt-contrib-copy'); 
  grunt.loadNpmTasks('grunt-contrib-clean');
  grunt.loadNpmTasks('grunt-contrib-concat');
  grunt.loadNpmTasks('grunt-contrib-uglify');
  grunt.loadNpmTasks('grunt-contrib-cssmin');
  grunt.loadNpmTasks('grunt-usemin'); 
  grunt.loadNpmTasks('grunt-contrib-imagemin'); 
  grunt.loadNpmTasks('grunt-rev'); 
  grunt.loadNpmTasks('grunt-contrib-coffee');
  grunt.loadNpmTasks('grunt-contrib-less');
  grunt.loadNpmTasks('grunt-contrib-watch');
  grunt.loadNpmTasks('grunt-contrib-jshint');


}
2 respostas
solução!

Sua task copy está pegando todos os arquivos, você precisa excluir manualmente da cópia os arquivos que não quer.

  copy: {
         public: {
           expand: true,
           cwd: 'public',
           src: '**',
           dest: 'dist'
         }
     },

Sua task está assim, a src aceita um array de arquivos e paramêtros, usando o glob format(se quiser enteder melhor como funcionar os , *, /), sugiro dar uma olhada nisso.

De todo modo, você pode usar o operador ! para negar alguns arquivos na cópia, deixando seu copy deste modo:

copy: {
         public: {
           expand: true,
           cwd: 'public',
           src: ['**','!**.css','!**/*.css,'!**.js','!**/*.js],
           dest: 'dist'
         }
     },

Você também poderia fazer o inverso e copiar somente arquivos com as extensões que você quer, mas nesse caso acho que seria mais complicado, talvez o método copy preciso ser adaptado as suas pastas, mas acredito que com essa base você consiga faze-lo.

Thifgh, uma alternativa é criar uma task 'clean' que apaga todos os arquivos que não terminem com min.js, afinal, na pasta de assets você só vai querer scripts e css's minificados, certo?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software