2015-03-25 18 views
18

Tôi đang sử dụng mẫu Xem Gulp này: https://github.com/floatdrop/gulp-watch/blob/master/docs/readme.md#starting-tasks-on-events.Đồng hồ Gulp chỉ chạy một lần

var gulp = require('gulp'); 
var watch = require('gulp-watch'); 
var batch = require('gulp-batch'); 

gulp.task('build', function() { console.log('Working!'); }); 

gulp.task('watch', function() { 
    watch('**/*.js', batch(function() { 
     gulp.start('build'); 
    })); 
}); 

Khi tôi chạy nó trên máy tính Windows 8 của tôi, nó chỉ chạy lần đầu tiên tôi thay đổi một tập tin:

C:\test>gulp watch 
[08:40:21] Using gulpfile C:\test\gulpfile.js 
[08:40:21] Starting 'watch'... 
[08:40:21] Finished 'watch' after 2.69 ms 
[08:40:31] Starting 'build'... 
Working! 
[08:40:31] Finished 'build' after 261 µs 

Lần sau có gì xảy ra. Tại sao?

+0

Bạn có thay đổi bất kỳ tệp nào không? Bởi vì bạn khi bạn thực hiện đồng hồ gulp, nó đang xem các tập tin. Khi bạn thay đổi một tập tin, chức năng trong đồng hồ được kích hoạt. – blablabla

+1

Có, có thể tôi không đủ rõ ràng. Tôi đang thay đổi các tập tin, nhưng 'xem' chỉ được thực hiện lần đầu tiên tôi thay đổi một tập tin. Ví dụ.nếu tôi bắt đầu 'gulp watch', thay đổi một cái gì đó trong tập tin * .js của tôi và lưu nó, xem đang chạy. Nếu tôi sau đó thay đổi một cái gì đó khác trong cùng một tập tin và lưu nó một lần nữa, sau đó xem không chạy. Quá trình 'gulp watch' vẫn đang chạy, nhưng không có gì xảy ra. – dhrm

+0

Nếu bạn vẫn muốn sử dụng 'gulp-batch', việc sử dụng đúng là có một cuộc gọi lại' done' ở đó: 'done' - là gọi lại cho tín hiệu chức năng của bạn thành batch, rằng bạn đã hoàn tất. Vì vậy: 'gulp.task ('watch', function() { watch ('**/*. Js', batch (function (events, done) { gulp.start ('build'); \t \t done(); })); }); ' – nemesv

Trả lời

13

Nếu bạn đọc các tài liệu hướng dẫn chặt chẽ, bạn sẽ thấy cụm từ sau:

Bạn có thể vượt qua callback đồng bằng, mà sẽ được kêu gọi tất cả các sự kiện hoặc bọc nó trong ngụm-batch để chạy nó lần

Vì vậy, về cơ bản là thỏa thuận với gulp-batch. Để liên tục xem nó, chỉ cần loại bỏ các cuộc gọi hàng loạt:

gulp.task('build', function (done) { 
    console.log('Working!'); 
    done(); 
}); 

gulp.task('watch', function() { 
    watch('app/*.js', function() { 
     gulp.start('build'); 
    }); 
}); 

(và thêm callback 'làm' đến build để cho Gulp biết khi bạn đã hoàn tất).

Btw ... Tôi không chắc chắn, nhưng tôi nghĩ rằng gulp-watch có nghĩa là không chỉ xem tệp, mà còn trực tiếp trả lại đối tượng vinyl. Vì vậy, thực sự sử dụng được xây dựng trong gulp.watch nên có tác dụng tương tự:

gulp.task('watch', function() { 
    gulp.watch('app/**/*.js', ['build']); 
}); 
+0

Bài đăng cũ nhưng hãy báo lại điều gì đó từ những gì @ddprrt đã nói, '" (và thêm' thực hiện 'gọi lại để xây dựng để cho Gulp biết khi bạn hoàn tất) "' Và điều đó gần như khiến tôi đánh đầu vào tường hàng giờ liền. Cảm ơn người đàn ông – Temitayo

3

tôi đã cùng một vấn đề và sử dụng giống như ddprrt. Sự khác biệt đã được sử dụng ký tự đại diện thư mục như apposed để đường dẫn tuyệt đối.

tôi đã thay đổi này:

gulp.task('watch', function() { 
    gulp.watch('sass/shortcutcss/*.scss', ['sass']) 
}); 

này:

gulp.task('watch', function() { 
    gulp.watch('sass/**/*.scss', ['sass']) 
}); 
+1

Cùng một vấn đề và giải pháp tương tự ở đây. Có thể mở một vấn đề về github về điều này sẽ là một ý thức tốt. –

+1

Tôi đã gặp sự cố tương tự và đã giải quyết vấn đề thêm thư mục ký tự đại diện /**/*.scss, bây giờ nó hoạt động –

0

Vấn đề này làm tôi điên cho một ngày cuối tuần. Tôi đã thử tất cả:

  • Add thực hiện() - tổ chức sự kiện
  • Rename/Touch/Rõ ràng mục tiêu CSS
  • Hãy cụ thể hơn với các filepaths

Nhưng (lý do cho vấn đề này và) giải pháp thật dễ dàng đến mức tôi cảm thấy thảm hại sau đó:

Chỉ cần update your nodejs installation, tôi là 0,12.x! Không có thắc mắc rằng điều này không làm việc.

Sau đó, sự kiện xem sẽ hoạt động trở lại. Đôi khi nó lại sai nữa. Nhưng trong trường hợp này chỉ cần lưu tập tin của bạn lần thứ hai và nó được công nhận. (Tôi nghĩ rằng foundation/gulp watch sẽ kiểm tra các thay đổi nhanh và trong khi tệp của bạn được thay thế bằng tệp mới được tải lên)

Các vấn đề liên quan