【问题标题】:gulp.watch going into endless loopgulp.watch 进入无限循环
【发布时间】:2014-12-13 18:49:53
【问题描述】:

这是我的 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”时,它会进入这样的无限循环。

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

谢谢!

【问题讨论】:

  • 您的屏幕没有显示任何循环

标签: javascript node.js gulp gulp-watch


【解决方案1】:

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

您正在观察所有.html 文件的更改以启动html 任务,即将脚本和样式文件的引用注入index.html 将导致此无限循环。

就在文件完成注入并写入磁盘时,您的html 任务的最后一个dest,这会触发您的监视程序,它会一次又一次地重新启动所有内容。

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

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

【讨论】:

  • 做到了。先生,您真是个天才。 :) 我没有意识到 gulp-inject 在文件运行时会对其进行更改。但是,您能建议一种方法来观察 html 的变化并重建它吗?非常欢迎对我的 gulpfile 提出任何其他建议。
  • 观察 html 更改以触发此任务的事实对我来说似乎很奇怪,因为您的 index.html 不应该更改。我建议您监听新创建的文件以触发此任务。您可以查看gulp-watch,这将允许您获取新文件,顺便说一句,我远非天才:)
  • 会看看的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多