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

Task de Copy e Clean

Pessoal,

A estrutura do meu projeto está assim:

public\

public\index.html

public\package.json

public\Gruntfile.js

public\css\

public\img\

public\js\

public\node_modules\

Quando deixo meu Gruntfile.js desta forma, ele não funciona:

===========================================================

module.exports = function(grunt) {

    grunt.initConfig({

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

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

    grunt.loadNpmTasks('grunt-contrib-copy');
    grunt.loadNpmTasks('grunt-contrib-clean');
}

===========================================================

SÓ FUNCIONA QUANDO DEIXO ELE ASSIM:

===========================================================

module.exports = function(grunt) {

    grunt.initConfig({

        copy: {
            public: {
                expand: true,
                cwd: '../public/', 
                src: '**', 
                dest: './dist/' 
            }
        },
        clean: {
            dist: {
                src: 'dist/'
            }
        }
    });

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

    grunt.loadNpmTasks('grunt-contrib-copy');
    grunt.loadNpmTasks('grunt-contrib-clean');
}

===========================================================

ALGUÉM SABE ME EXPLICAR PORQUE? POIS DE ACORDO COM A AULA, A PRIMEIRA FORMA DEVERIA TER FUNCIONADO....

ABS

6 respostas
solução!

Você criou o Gruntfile.js dentro da pasta public!!!! Eu não crio ela dentro de public, crio um nível antes.

Certo Flavio, entendi o motivo de não funcionar em um jeito e funcionar no outro.

Existe alguma boa prática quanto ao local do arquivo Gruntfile.js?

E quanto ao arquivo package.json?

No SRC, estamos colocando '**', assim vamos pegar todos os arquivos existentes na raiz do CWD e copiar para o DEST.

Como eu faço para copiar apenas uma ou duas pastas/arquivos?

E se eu realmente quiser copiar tudo para pasta destino com a exceção de uma pasta/arquivos?

Obrigado

Você pode excluir da cópia pastas ou arquivos usando glob pattern de exclusão. Exemplo:

'*/', '!index.html', '!js/lib.js'],

Quem tem exclamação será ignorado.

Obrigado Flavio, funcionou perfeitamente a ! para ignorar arquivos ou pastas.

Minha tarefa de copy ficou assim, copio tudo que está na raiz do projeto com exceção da pasta node_modules.

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

Aí me surgiu uma nova dúvida. Em minha pasta de distribuição eu preciso copiar os arquivos Gruntfile.js e package.json?

E a pasta node_modules ?

Obrigado

N precisa. :) só se o processo de build fosse no servidor, outra forma de se fazer. Mas aí não teria copia de arquivos, faria direto boa originais, mas no processo no Server e não na sua máquina.

Obrigado.