Nodemon 与 gulp watch 绑定时崩溃并重新启动两次以上

Posted

技术标签:

【中文标题】Nodemon 与 gulp watch 绑定时崩溃并重新启动两次以上【英文标题】:Nodemon crashed when bound with gulp watch and restarted more than twice 【发布时间】:2018-03-05 23:11:50 【问题描述】:

我正在尝试使用单个 gulp 命令使我的进程(webpack、nodemon-restart)工作。这工作得很好。但是,如果 webpack 的任务绑定到 gulp 的默认任务(与 nodemon 一起),或者嵌入到 nodemon 的 gulp 任务中,则 webpack 只会构建一次。

然后我决定将 webpack 构建任务和 nodemon 重新启动任务绑定到 gulp 的 watch 命令,这正是我想要的方式,除了如果你进行更改并保存它们超过两次,应用程序 nodemon 崩溃并打印此错误在控制台中

"/home/nnanyielugo/Workspace/activity-calendar/node_modules/nodemon/lib/monitor/match.js:132
  var rules = monitor.sort(function (a, b) 
                     ^
    TypeError: Cannot read property 'sort' of undefined"

作为一种解决方案,我尝试使用 .on() 方法将 webpack 构建任务绑定到 nodemon 重启,而是得到了重启重建的无限循环(nodemon 首先重启,webpack 构建,nodemon 再次重启,webpack重建,等等)。

请问有人有解决办法吗?`

这是我的代码示例`

var gulp = require('gulp'),
    nodemon = require('gulp-nodemon'),
    webpack = require('webpack-stream');


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

gulp.task('webpack', function() 
    return gulp.src('src/entry.js')
    .pipe(webpack(require('./webpack.config.js')))
    .pipe(gulp.dest('./public'));
);

gulp.task('nodemon', function () 
    return nodemon(
      script: 'app.js'
    , ext: 'js html'
    , env:  'NODE_ENV': 'development' 
    )    
) 

gulp.task('watch', function()
    gulp.watch(['./api/**/*.js', './server/**/*.js', './*.js'],  ['webpack', 'nodemon']);
)`

【问题讨论】:

【参考方案1】:

我猜,您的nodemongulp's 监视任务相互冲突。要么你应该使用nodemon 并依赖gulp 来启动你的应用程序。

否则,您可以像这样摆脱gulp's 监视任务并在您的nodemonrestart 方法中添加相关脚本,

nodemon(
   // script goes here.
).on('restart', your_reload_logic)

希望这会有所帮助!

【讨论】:

在nodemon的restart方法中添加webpack的transpiler命令'webpack'会使nodemon进入一个无休止的reatart循环(nodemon在webpack transpiles之前重启,然后nodemon必须再次重启,webpack再次构建,nodemon再次重启,一直在继续。

以上是关于Nodemon 与 gulp watch 绑定时崩溃并重新启动两次以上的主要内容,如果未能解决你的问题,请参考以下文章

将 browsersync 与 gulp/nodemon 一起使用

将参数从脚本传递给 gulp 任务

更改 *.js 文件后,页面重新加载非常缓慢(~30sec-2min)[express+gulp+gulp-nodemon+browser-sync]

与'nodemon'和'watch'任务一起运行grunt-concurrent时的无限循环

gulp & nodemon 导致的内存泄漏

Gulp-nodemon 和监视任务