Gulp Watch and Nodemon conflict

前端 未结 2 1120
滥情空心
滥情空心 2021-02-01 23:18

Short of it: started using Gulp recently (convert from Grunt), and am trying to use both Gulp\'s default watch task (not gulp-watch from npm) for SASS/JS/HTML and gulp-nodemon (

2条回答
  •  面向向阳花
    2021-02-02 00:16

    gulp.run calls have been deprecated, so I'd try a different approach. Since you're already using gulp, may I suggest giving gulp-nodemon a try?

    As per gulp-nodemon documentation, you can pass it an array of tasks to execute:

    UPDATE: Here's the full gulpfile.js file, together with a working sample on github.

    'use strict';
    
    // Main dependencies and plugins
    var gulp = require('gulp');
    var jshint = require('gulp-jshint');
    var concat = require('gulp-concat');
    var uglify = require('gulp-uglify');
    var rename = require('gulp-rename');
    var nodemon = require('gulp-nodemon');
    
    var assets = 'assets/js/**/*.js';
    var publicDir = 'public/javascripts';
    
    // Lint Task
    gulp.task('lint', function () {
      return gulp.src(assets)
        .pipe(jshint())
        .pipe(jshint.reporter('jshint-stylish'));
    });
    
    // Concatenate and minify all JS files
    gulp.task('scripts', function () {
      return gulp.src(assets)
        .pipe(concat('global.js'))
        .pipe(gulp.dest(publicDir))
        .pipe(rename('global.min.js'))
        .pipe(uglify())
        .pipe(gulp.dest(publicDir));
    });
    
    // Watch Files For Changes
    gulp.task('watch', function () {
      gulp.watch(assets, ['lint', 'scripts']);
    });
    
    gulp.task('demon', function () {
      nodemon({
        script: 'server.js',
        ext: 'js',
        env: {
          'NODE_ENV': 'development'
        }
      })
        .on('start', ['watch'])
        .on('change', ['watch'])
        .on('restart', function () {
          console.log('restarted!');
        });
    });
    
    // Default Task
    gulp.task('default', ['demon']);
    

    This way, you spawn the watch task upon nodemon's start and ensure that the watch task is again triggered whenever nodemon restarts your app.

    EDIT: seems you should be calling the on-change event from gulp-nodemon, which will handle compile tasks before the restart event triggers.

    EDIT: It seems nodemon's on('change', callback) is removed from their API

提交回复
热议问题