Gulp任务在运行手动时输出正常,在gulp.watch中使用时输出失败

Gulp task outputs fine when run manually, fails to output when used in gulp.watch

我有一个 gulp 任务执行一些非常常见的任务 - 它 运行s jshint 来验证我的代码,然后连接并最小化文件并将它们输出到单个 .min.js 个文件。

当我手动 运行 时,任务(似乎)可以完美执行。但是第二次我尝试在 $gulp.watch 中使用它,它不再输出我的文件(尽管它仍然执行并执行 jshint)。

我任务中的代码:

gulp.src(path.join(workingPath, folder, '/*.js'))
        .pipe(jshint())
        .pipe(jshint.reporter(stylish))
        .pipe(jshint.reporter('fail'))     //stop build if errors found
        .on('error', function() {
            console.log("Please review and correct jshint errors.");
            this.end();
        })
        .pipe(order([                      //order files before concat - ensure module definitions are first
            "*.module.js",
            "*.js"
        ]))
        .pipe(concat(filename+'.js'))
        .pipe(gulp.dest(destinationPath))   //full combined version
        .pipe(uglify())
        .pipe(rename(filename+'.min.js'))
        .pipe(gulp.dest(destinationPath))  //minified combined version
        .on('error',function() {
            console.log("An error occurred during Gulp processing.");
            this.end();
        });

我的gulp手表(任务名为'components'):

  gulp.watch(componentsBasePath+"/**/*.js",['components']);

我注意到的一件事是在手册的末尾 运行 我看到了 "Process finished with exit code.."。如果我杀死我的 gulp.watch,它会输出 "Process finished with exit code.." - 然后它会创建输出文件!

我的目标是让我的 'components' 任务在每次被手表触发时创建这些输出文件 - 而不仅仅是在我关闭手表时。

谢谢!
悬崖

运行 这是别人的,他找到了问题的原因。虽然 - 事实证明它根本没有 Gulp 相关。

当我手动 运行 我的 'components' 任务时,我正在使用的 IDE 会立即更新文件夹和文件结构,但是当我 运行 gulp.watch 任务。我很高兴地报告虽然文件已成功创建,但在我终止任务之前它们从未出现在 IDE 中。

好吧,我用 jetbrains 解决这个问题的 hacky 方法(我使用的是 phpstorm),你必须理解两件事。

  • gulp 观察者对文件保存采取行动。
  • jetbrains 不会自动更新项目文件(因为您已经发现它使用缓存)。

为了解决这个问题,我创建了一个名为 saveSync 的宏,它执行以下操作:

  1. 全部保存
  2. 同步
  3. 同步
  4. 同步

为什么我同步了3次?因为 gulp 需要几秒钟才能完成任务(编译等),如果您在任务完成之前进行更新,显然项目视图无法正确更新。我还没有想出在宏本身中插入时间延迟的方法。

创建宏后,我只是将 ctrl + s 从全部保存到宏,然后就成功了。

如果有 'cleaner' 方法可以做到这一点,我还没有发现它。