A tarefa Gulpjs a seguir funciona bem ao editar arquivos na correspondência global:
// watch task.
gulp.task('watch', ['build'], function () {
gulp.watch(src + '/js/**/*.js', ['scripts']);
gulp.watch(src + '/img//**/*.{jpg,jpeg,png,gif}', ['copy:images']);
gulp.watch(src + '/less/*.less', ['styles']);
gulp.watch(src + '/templates/**/*.{swig,json}', ['html']);
});
// build task.
gulp.task('build', ['clean'], function() {
return gulp.start('copy', 'scripts', 'less', 'htmlmin');
});
No entanto, ele não funciona (não é acionado) para arquivos novos ou excluídos. Tem algo que estou perdendo?
EDIT : mesmo usando o plugin grunt-watch, parece não funcionar:
gulp.task('scripts', function() {
return streamqueue(
{ objectMode: true },
gulp.src([
vendor + '/jquery/dist/jquery.min.js',
vendor + '/bootstrap/dist/js/bootstrap.min.js'
]),
gulp.src([
src + '/js/**/*.js'
]).pipe(plugins.uglify())
)
.pipe(plugins.concat(pkg.name + '.min.js'))
.pipe(gulp.dest(dest + '/js/'));
});
gulp.task('watch', ['build'], function () {
plugins.watch({glob: src + '/js/**/*.js'}, function () {
gulp.start('scripts');
});
});
Edição : Resolvido, foi esse problema . Os globos que começam com ./
(esse era o valor de src
) parecem não funcionar no caixa eletrônico.
javascript
node.js
gulp
gremo
fonte
fonte
gulp-watch
, por exemplogulp.watch('js/**/*.js', {cwd: src}, ['scripts']);
Respostas:
Editar: Aparentemente
gulp.watch
, agora funciona com arquivos novos ou excluídos. Não aconteceu quando a pergunta foi feita.O restante da minha resposta ainda permanece:
gulp-watch
geralmente é uma solução melhor porque permite executar ações específicas apenas nos arquivos que foram modificados, enquantogulp.watch
apenas permite executar tarefas completas. Para um projeto de tamanho razoável, isso rapidamente se tornará lento demais para ser útil.Você não está perdendo nada.
gulp.watch
não funciona com arquivos novos ou excluídos. É uma solução simples projetada para projetos simples.Para ver arquivos que podem procurar novos arquivos, use o
gulp-watch
plug in , que é muito mais poderoso. O uso fica assim:Pessoalmente, recomendo a primeira opção. Isso permite processos muito mais rápidos por arquivo. Funciona muito bem durante o desenvolvimento com o carregamento do fígado, desde que você não esteja concatenando nenhum arquivo.
Você pode agrupar seus fluxos usando minha
lazypipe
biblioteca ou simplesmente usando uma função estream-combiner
assim:ATUALIZAR 15 de outubro de 2014
Como apontado por @pkyeck abaixo, aparentemente a versão 1.0
gulp-watch
mudou ligeiramente o formato, portanto os exemplos acima devem ser agora:e
fonte
Ambos
gulp.watch()
erequire('gulp-watch')()
irá desencadear para arquivos novos / excluídos no entanto, não se você usar diretórios absolutos. Nos meus testes, não usei"./"
para diretórios relativos BTW.Ambos não serão acionados se diretórios inteiros forem excluídos.
fonte
./
em seus caminhos - na verdade, parece que a má prática - github.com/floatdrop/gulp-watch/issues/1gulp-watch
funcionar corretamente para acionar novos arquivos ou arquivos excluídos. Não há necessidade!gulp.watch
faz isso. A remoção de todos./
os caminhos solucionou problemas. Impressionante.Se
src
for um caminho absoluto (começando com/
), seu código não detectará arquivos novos ou excluídos. No entanto, ainda há uma maneira:Ao invés de:
escrever:
e vai funcionar!
fonte
{ cwd: src }
dica foi minha solução. Muito obrigado!watch
{cwd:'./'}
e deixar o padrão glob como é por isso se tornariagulp.watch('src/js/**/*.js', {cwd: './'}, ['scripts']);
Os globos devem ter um diretório base separado especificado e esse local base não deve ser especificado no próprio globo.
Se você tiver
lib/*.js
, ele procurará sob o diretório de trabalho atual, que éprocess.cwd()
O Gulp usa o Gaze para assistir arquivos e, no documento da API do Gulp , vemos que podemos passar opções específicas do Gaze para a função de observação:
gulp.watch(glob[, opts], tasks)
Agora, no documento do Gaze , podemos descobrir que o diretório de trabalho atual (glob base dir) é a
cwd
opção.O que nos leva à resposta de alexk:
gulp.watch('js/**/*.js', {cwd: src}, ['scripts']);
fonte
Sei que essa é uma pergunta mais antiga, mas pensei em lançar a solução que me veio à cabeça. Nenhum dos plugins do gulp que encontrei me notificaria de arquivos novos ou renomeados. Então, acabei envolvendo o monóculo em uma função de conveniência.
Aqui está um exemplo de como essa função é usada:
Devo observar que o gulpStart também é uma função de conveniência que eu criei.
E aqui está o módulo de relógio real.
Bem simples, né? A coisa toda pode ser encontrada no meu kit para iniciantes do gulp: https://github.com/chrisdavies/gulp_starter_kit
fonte
utils
pasta)É importante observar que parece que o gulp.watch apenas relata arquivos alterados e excluídos no Windows, mas escuta arquivos novos e excluídos por padrão no OSX:
https://github.com/gulpjs/gulp/issues/675
fonte
Você deve usar 'gulp-watch' para arquivos novos / renomeados / excluídos, em vez de gulp.watch
fonte