javascript - gulp.watch 进入无限循环

标签 javascript node.js gulp gulp-watch

这是我的 gulpfile。

var gulp = require('gulp');
var less = require('gulp-less');
var clean = require('gulp-clean');
var mincss = require('gulp-minify-css');
var gulpif = require('gulp-if');
var uglify = require('gulp-uglify');
var concat = require('gulp-concat');
var inject = require('gulp-inject');
var templateCache = require('gulp-angular-templatecache');
var angularFilesort = require('gulp-angular-filesort');

var env = 'development';

gulp.task('default', ['clean'], function() {
    gulp.start('static', 'html');
});

gulp.task('production', ['set-production', 'default']);

gulp.task('development', ['default'], function() {
    gulp.watch('./src/less/**/*.less', ['styles']);
    gulp.watch('./src/js/**/*.js', ['scripts']);
    gulp.watch('./*.html', ['html']);
});

gulp.task('static', function() {
    return gulp.src(['./src/static/*.*'])
        .pipe(gulp.dest('./dist/static'));
});

gulp.task('clean', function() {
    return gulp.src('./dist', {
        read: false
      })
      .pipe(clean());
});

gulp.task('html', ['styles', 'vendor-js', 'templateCache', 'scripts'], function() {
    return gulp.src('./*.html')
        .pipe(inject(gulp.src(['./dist/js/**/*.js'])
            .pipe(angularFilesort()), {
                'ignorePath': 'dist/js',
                'addRootSlash': false,
                'addPrefix': 'scripts'
            }))
        .pipe(inject(gulp.src(['./dist/vendors/**/*.js', '!./dist/vendors/less/less.js'], {
            read: false
        }), {
            'name': 'vendors',
            'ignorePath': 'dist/vendors',
            'addRootSlash': false,
            'addPrefix': 'vendors'
        }))
        .pipe(inject(gulp.src(['./dist/css/*.css'], {
            read: false
        }), {
            'ignorePath': 'dist/css',
            'addRootSlash': false,
            'addPrefix': 'styles'
        }))
        .pipe(gulp.dest('dist'));
});

gulp.task('styles', function() {
    return gulp.src('./src/less/*.less')
        .pipe(less())
        .pipe(gulpif(env === 'production', mincss()))
        .pipe(gulpif(env === 'production', concat('styles.css')))
        .pipe(gulp.dest('dist/css'));
});

gulp.task('scripts', function() {
    return gulp.src('./src/js/**/*.js')
        .pipe(gulpif(env === 'production', uglify()))
        .pipe(gulpif(env === 'production', concat('scripts.js')))
        .pipe(gulp.dest('dist/js'));
});

gulp.task('vendor-js', function() {
    return gulp.src(['./vendors/jQuery/jquery-1.11.1.js', 'vendors/angular/angular.js'])
        .pipe(concat('vendors.js'))
        .pipe(gulp.dest('dist/vendors'));
});

gulp.task('templateCache', function() {
    return gulp.src('./src/js/**/*.tpl.html')
        .pipe(templateCache('templatesCache.js', {
            module: 'templatesCache',
            standalone: true,
            root: './templates/'
        }))
        .pipe(gulp.dest('./dist/js'));
});

gulp.task('set-production', function() {
    env = 'production';
});

当我运行“gulp development”时,它会进入这样一个无限循环。 enter image description here

enter image description here

我确定我尝试观看内容的方式存在问题。 有人可以帮我解决这个问题吗?

谢谢!

最佳答案

我认为你的问题来自你的 html 观察者。

事实上,您正在观察所有 .html 文件的变化以启动 html 任务,即将您的脚本和样式文件的引用注入(inject)到index.html 将导致这个无限循环。

当文件完成注入(inject)并写入磁盘时,您的 html 任务的最终 dest 会触发您的观察者,一次又一次地重新启动一切.

因此删除观察者或从观察者中排除 index.html 以防止重新启动

gulp.watch(['./*.html', '!index.html'], ['html']);

关于javascript - gulp.watch 进入无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27462408/

相关文章:

node.js gulp-livereload 在浏览器中不刷新

javascript - 在一个脚本中使用多个 page.open

javascript - 如何从 C 程序与 Web 服务器通信

javascript - 在Nodewebkit环境中使用logger

mysql - 如何在nodejs中使用hooks/sequelize更新数据库

Gulp 从流中排除文件(如果它们存在于目标中)

javascript - greasemonkey/chrome 用户脚本的跨浏览器 console.log

Javascript简单数学我不明白(初学者)

javascript - Expressjs - 将表单数组/括号字段解析为实际数组

javascript - 在 gulp 中注入(inject) js 和 css 时,如何提供对 index.html 的写权限?