Gulp watch仅使用watchify触发一次
我遇到了一个问题,watchify和gulp.watch之间有一些奇怪的相互作用。当我们使用watchify进行轮询时(我需要这样做,因为它在一个不稳定的环境中运行),那么gulp.watch任务只在文件第一次更改时启动 gulpfile:Gulp watch仅使用watchify触发一次,gulp,watchify,Gulp,Watchify,我遇到了一个问题,watchify和gulp.watch之间有一些奇怪的相互作用。当我们使用watchify进行轮询时(我需要这样做,因为它在一个不稳定的环境中运行),那么gulp.watch任务只在文件第一次更改时启动 gulpfile: var gulp = require('gulp'); var util = require('gulp-util'); var eslint = require('gulp-eslint'); var browserify = require('brows
var gulp = require('gulp');
var util = require('gulp-util');
var eslint = require('gulp-eslint');
var browserify = require('browserify');
var watchify = require('watchify');
var source = require('vinyl-source-stream');
function bundle(bundler) {
return bundler
.bundle()
.on('error', (error) => util.log(util.colors.red('Error compiling scripts:'), error.message))
.pipe(source('./app.js'))
.pipe(gulp.dest('./'));
}
gulp.task('default', ['build', 'watch']);
gulp.task('build', ['lint', 'scripts']);
gulp.task('lint', function() {
gulp.src('./src/**/*.js')
.pipe(eslint());
});
gulp.task('scripts', ['lint'], function() {
var bundler = browserify({
entries: ['./src/app.js'],
cache: {},
packageCache: {},
fullPaths: true,
});
var watcher = watchify(bundler, {poll: true});
watcher.on( 'update', () => {
util.log( 'Now Updating Scripts...');
return bundle(watcher);
});
return bundle(watcher);
})
gulp.task('watch', ['build'], function() {
gulp.watch(['./src/**/*.js'], ['lint']);
})
此处为示例存储库:
当您在初始编译后运行gulp并更改文件两次时,您会看到以下内容
[12:02:49] Using gulpfile ~/repo/watchify-gulp-watch-issue/gulpfile.js
[12:02:49] Starting 'lint'...
[12:02:49] Finished 'lint' after 24 ms
[12:02:49] Starting 'scripts'...
[12:02:49] Finished 'scripts' after 98 ms
[12:02:49] Starting 'build'...
[12:02:49] Finished 'build' after 6.17 μs
[12:02:49] Starting 'watch'...
[12:02:49] Finished 'watch' after 8.41 ms
[12:02:49] Starting 'default'...
[12:02:49] Finished 'default' after 11 μs
[12:03:48] Starting 'lint'...
[12:03:48] Finished 'lint' after 3.87 ms
[12:03:48] Now Updating Scripts...
[12:03:55] Now Updating Scripts...
有几项值得注意,如果我不使用watchify并进行完整的重新编译,它工作得很好,但这会减慢速度,使其在实践中变得有用。如果我取消投票,它可以正常工作,但这会阻止它在NFS环境中工作。整个上午都在试图了解这里发生了什么,但没有取得任何进展,所以希望我能得到一些帮助。所以在做了大量挖掘之后,我们发现了。这似乎是因为gulp和watchify都在引擎盖下使用chokidar。chokidar尝试的优化导致了问题。通过启动单独的流程暂时解决了这个问题。嗨,马特,很高兴看到有人有同样的问题。。。谢谢你的挖掘!您如何在单独的进程中运行它?你有例子吗?