Gulp Watch 和 Nodemon 冲突

2024-05-20

简而言之:最近开始使用 Gulp(从 Grunt 转换),并且尝试使用 Gulp 的默认监视任务(不是来自 npm 的 gulp-watch)用于 SASS/JS/HTML 和 gulp-nodemon(来自 npm)来重新启动 Express服务器发生变化时。刚跑步时gulp watch,工作正常;以及跑步时gulp server(对于nodemon)效果很好。但是,同时使用两者(如下所示的默认任务配置),手表功能不起作用。任务正在运行,并且在 CLI 上 gulp 显示监视任务的“正在开始”和“已完成”,但文件不会更新。

相关任务配置:

连接 JavaScript:

    gulp.task('js:app', function(){
        return gulp.src([
            pathSource('js/application/modules/**/*.js'),
            pathSource('js/application/_main.js')
        ])
        .pipe(concat('application.js'))
        .pipe(gulp.dest('./build/assets/js')).on('error', utils.log);
    });

Nodemon,对 Express 应用程序进行更改后重新启动:

    gulp.task('express', function(){
        return nodemon({script:'server.js', ext:'js', cwd: __dirname + '/express', legacyWatch: true})
        .on('restart', function(){
            //gulp.run('watch'); // doesn't work :(
        });
});

观察 javascript 更改,并运行 js:app 进行连接。

    gulp.task('watch', function(){
      gulp.watch(pathSource('js/application/**/*.js'), ['js:app']);
    });

默认任务,同时初始化 gulp watch 和 nodemon:

    gulp.task('default', ['watch', 'express']);

如果有人有任何想法,请提前致谢!


gulp.run已致电已弃用 https://github.com/gulpjs/gulp/issues/193#issuecomment-33277999,所以我会尝试不同的方法。既然你已经在使用gulp,我可以建议给gulp-nodemon https://www.npmjs.org/package/gulp-nodemon a try?

根据 gulp-nodemon文档 https://github.com/JacksonGariety/gulp-nodemon#onevent-tasks,您可以向其传递一组要执行的任务:

UPDATE: 这是完整的gulpfile.js文件以及工作示例在 github 上 https://github.com/gfestari/gulp-sample.

'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']);

这样,您就可以生成watch任务在nodemon启动时并确保watch每当nodemon重新启动您的应用程序时,任务就会再次触发。

EDIT看来你应该打电话给on-change 来自 gulp-nodemon 的事件 https://github.com/JacksonGariety/gulp-nodemon#onevent-tasks,它将处理编译任务before the restart事件触发器。

EDIT: 好像是nodemon的on('change', callback)被从他们中删除API https://github.com/remy/nodemon/blob/master/doc/events.md

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Gulp Watch 和 Nodemon 冲突 的相关文章