問題描述
在全局匹配中編輯文件時,以下 Gulpjs 任務(wù)可以正常工作:
The following Gulpjs task works fine when editing files in the glob match:
// 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');
});
但是,對于新文件或已刪除文件,它不起作用(未觸發(fā)).我有什么遺漏嗎?
However it doesn't work (it's not triggered) for new or deleted files. Is there something I'm missing?
編輯:即使使用 grunt-watch 插件,它似乎也不起作用:
EDIT: even using grunt-watch plugin it seems not working:
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');
});
});
編輯:已解決,是這個問題.以 ./
開頭的 Glob(即 src
的值)似乎無法在 ATM 上工作.
EDIT: Solved, it was this issue. Globs starting with ./
(that was the value of src
) seems not working ATM.
推薦答案
顯然 gulp.watch
現(xiàn)在可以處理新文件或已刪除文件.問問題時沒有.
Apparently gulp.watch
does work with new or deleted files now. It did not when the question was asked.
我的回答仍然有效:gulp-watch
通常是更好的解決方案,因為它允許您僅對已修改的文件執(zhí)行特定操作,而 gulp.watch
只允許您運行完整的任務(wù).對于一個合理規(guī)模的項目,這很快就會變得太慢而無法使用.
The rest of my answer still stands: gulp-watch
is usually a better solution because it lets you perform specific actions only on the files that have been modified, while gulp.watch
only lets you run complete tasks. For a project of a reasonable size, this will quickly become too slow to be useful.
你沒有錯過任何東西.gulp.watch
不適用于新文件或已刪除文件.這是一個為簡單項目設(shè)計的簡單解決方案.
You aren't missing anything. gulp.watch
does not work with new or deleted files. It's a simple solution designed for simple projects.
要獲得可以查找新文件的文件監(jiān)視,請使用 gulp-watch
插件,更強大.用法如下所示:
To get file watching that can look for new files, use the gulp-watch
plugin, which is much more powerful. Usage looks like this:
var watch = require('gulp-watch');
// in a task
watch({glob: <<glob or array of globs>> })
.pipe( << add per-file tasks here>> );
// if you'd rather rerun the whole task, you can do this:
watch({glob: <<glob or array of globs>>}, function() {
gulp.start( <<task name>> );
});
我個人推薦第一個選項.這允許更快的每個文件進程.只要您不連接任何文件,它就可以在使用 livereload 的開發(fā)過程中運行良好.
Personally, I recommend the first option. This allows for much faster, per-file processes. It works great during development with livereload as long as you aren't concatenating any files.
您可以使用 我的 lazypipe
庫 或簡單地使用函數(shù)和 stream-combiner
像這樣:
You can wrap up your streams either using my lazypipe
library, or simply using a function and stream-combiner
like this:
var combine = require('stream-combiner');
function scriptsPipeline() {
return combine(coffeeescript(), uglify(), gulp.dest('/path/to/dest'));
}
watch({glob: 'src/scripts/**/*.js' })
.pipe(scriptsPipeline());
<小時>
更新 2014 年 10 月 15 日
UPDATE October 15, 2014
正如下面@pkyeck 所指出的,顯然 gulp-watch
的 1.0 版本稍微改變了格式,所以上面的例子現(xiàn)在應(yīng)該是:
As pointed out by @pkyeck below, apparently the 1.0 release of gulp-watch
changed the format slightly, so the above examples should now be:
var watch = require('gulp-watch');
// in a task
watch(<<glob or array of globs>>)
.pipe( << add per-file tasks here>> );
// if you'd rather rerun the whole task, you can do this:
watch(<<glob or array of globs>>, function() {
gulp.start( <<task name>> );
});
和
var combine = require('stream-combiner');
function scriptsPipeline() {
return combine(coffeeescript(), uglify(), gulp.dest('/path/to/dest'));
}
watch('src/scripts/**/*.js')
.pipe(scriptsPipeline());
這篇關(guān)于Gulps gulp.watch 不會為新文件或已刪除文件觸發(fā)?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!