Gulp Watching在不更改文件的情况下创建无限循环

时间:2016-05-27 03:21:21

标签: node.js gulp watch

与其他问题类似,在这个非常淡化的代码段中,运行默认 gulp任务(通过npm start运行gulp);此代码段创建了一个无限循环,一遍又一遍地运行脚本任务。这是 gulpfile.js (字面意思是目前的全部内容):

'use strict';

const gulp = require('gulp');

// COPY SCRIPTS TO BUILD FOLDER
gulp.task('scripts', function() {
    return gulp.src('./scripts/**/*.js')
    .pipe(gulp.dest('build/scripts'))
});

// WATCH FILES
gulp.task('watch', function() {
    gulp.watch('./scripts/**/*.js', ['scripts']);
});

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

奇怪的是, build 文件夹是否重新构建,脚本任务将在调用npm start后立即执行!循环开始了。

如果你有点好奇,这是我的 package.json 中粘贴的(也是唯一的)脚本对象:

  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "gulp"
  },

我目录中唯一的另一件事是脚本文件夹,其中包含 app.js home.js 文件。显然,一旦运行了这个任务,就会创建 build 文件夹(如果它还没有),并将上述两个文件复制到其中。

您可以看到我只在根目录的第一级文件夹中查找脚本,因此我不应该通过引用同一组脚本上的更改来进行无限循环。此外,即使我是明确的,并指向一个具有相对路径的特定文件,例如./scripts/home.js,这仍然会发生。

我预计会感到尴尬,但我完全糊涂了。

2 个答案:

答案 0 :(得分:0)

我接受了一些可能导致错误的事情。

编辑 - 试试手表插件npm install --save-dev gulp-watch

// Try and declare your plugins like this for now.
var gulp  = require('gulp'),
    watch = require('gulp-watch');

// Provide a callback, cb
gulp.task('scripts', function(cb) {
  // Dont use ./ on your src as watch can have a problem with this
  return gulp.src('scripts/**/*.js')
    .pipe(gulp.dest('./build/scripts'), cb); // call cb and dont forget ;
});

// remove ./ on watch
gulp.task('watch', function() {
  gulp.watch('scripts/**/*.js', ['scripts']);
});

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

所以这是非常奇怪的行为,但这应该可以解决问题。 我在gulp中使用./的唯一一次是我的目标。

另外请记住gulpfile只是一个JS,所以请记住你的分号等。

答案 1 :(得分:0)

我不能保证这里的解决方案,但是我解决了两个变量:

  • 我升级了Parallels VM应用程序(在Apple PowerBook上) 版本10 - > 11。
  • 我使用当前版本的其他许可证重新安装了Windows 10 (前一个是许可的开发版或早期版本)。

我的代码,节点版本,devDependencies和版本完全相同。