Gulp Watchは一度だけ実行されます
私はこのGulp Watchサンプルを使用しています: https://github.com/floatdrop/gulp-watch/blob/master/docs/readme.md#starting-tasks-on-events 。
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');
}));
});
Windows 8マシンで実行すると、ファイルを初めて変更したときにのみ実行されます。
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
次回は何も起こりません。どうして?
ドキュメントを注意深く読むと、次のフレーズが表示されます。
すべてのイベントで呼び出されるプレーンコールバックを渡すことができますまたはgulp-batchでラップして実行しますonce
つまり、基本的にはgulp-batch
。常に監視するには、バッチ呼び出しを削除するだけです。
gulp.task('build', function (done) {
console.log('Working!');
done();
});
gulp.task('watch', function () {
watch('app/*.js', function () {
gulp.start('build');
});
});
(「完了」コールバックをbuild
に追加して、完了したことをGulpに通知します)。
ところで...よくわかりませんが、gulp-watch
は、ファイルを監視するだけでなく、レコードを直接返すことも目的としています。したがって、実際には組み込みのgulp.watch
も同じ効果があります。
gulp.task('watch', function () {
gulp.watch('app/**/*.js', ['build']);
});
私にとっては、タスクに「リターン」を追加することでした:
gulp.task('styles', function(){
return gulp.src('css/styles.css')
.pipe(autoprefixer())
.pipe(gulp.dest('build'));
});
私は同じ問題を抱えており、ddprrtと同じものを使用しました。違いは、絶対パスの代わりにワイルドカードを使用することでした。
私はこれを変更しました:
gulp.task('watch', function() {
gulp.watch('sass/shortcutcss/*.scss', ['sass'])
});
これに:
gulp.task('watch', function() {
gulp.watch('sass/**/*.scss', ['sass'])
});
この問題は私を週末に夢中にさせました。私はすべて試しました:
- Done()-イベントを追加
- ターゲットCSSの名前変更/タッチ/クリア
- ファイルパスをより具体的にする
しかし、(この問題の理由と)解決策は非常に簡単だったので、その後は哀れに感じました。
ただ nodejsインストールを更新する 、私のものは0.12.xでした!これがうまくいかないのも不思議ではありません。
その後、監視イベントが再び機能します。時々それもまたうまくいかない。ただし、この場合は、ファイルをもう一度保存するだけで認識されます。 (おもう foundation/gulp watch
高速への変更をチェックし、ファイルが新しくアップロードされたファイルに置き換えられている間)