【问题标题】:How to run gulp task with watch ONLY if a new file was added如果添加了新文件,如何使用 watch 运行 gulp 任务
【发布时间】:2015-01-21 15:51:05
【问题描述】:

这个问题是在 gulp 3.8.10 上提出的,使用 gulp.watch 而不是 'gulp-watch'

我有一个任务将我所有的 html/css/js 文件注入到我的 index.html 中

gulp.task('index', function () {
  var sources = gulp.src(['./src/**/*.js', './src/**/*.css'], {read: false});
  return gulp.src('./src/index.html')
    .pipe(inject(sources, {ignorePath: 'src', addRootSlash: false }))
    .pipe(gulp.dest('./src'));
});

此任务由以下自动触发:

gulp.watch('src/**/*', ['index']);

由于所有这些任务都是,将外部文件导入我的 index.html,如下所示:

<!-- inject:js -->
<script src="app/app.js"></script>
<script src="module/module.js"></script>
<!-- endinject -->

如果添加了新文件,我希望让观察者运行此任务,重新运行和修改我的 index.html 没有意义文件,当我只是更改已经注入其中的文件时。

有没有办法用 gulp 做到这一点?

编辑: 接受答案后这是适用于我给定示例的实际代码:

gulp.watch('src/**/*', function(event) {
  if (event.type === 'added' ) {
    gulp.start('index');
  }
});

【问题讨论】:

    标签: javascript node.js gulp


    【解决方案1】:

    在任务或回调中,您将有一个event 参数,它有一个type 属性,它将告诉您文件是否被添加、删除或更改。最好的选择可能是根据您的任务来利用它。

    function watcher(event){
       if(event.type === 'added'){ /* do work */ }
    }
    

    【讨论】:

    • 所以在上面的任务中我使用了 gulp.task('index', function (event) { ,但是 event 似乎是一个函数,如果我不调用它,gulp 在任务。这就是你的意思吗?将 event 参数添加到任务运行的函数中?因为它似乎没有类型( console.log(event.type) 打印未定义,而 console.log(event ) 打印 [Function]。
    • 不,不是在任务中,而是在手表的回调中。 github.com/gulpjs/gulp/blob/master/docs/… 。为清晰起见进行了编辑。
    • 由于某种原因,您最新编辑中的代码对我不起作用。我确实使用上面链接中建议的代码让它工作。谢谢。
    • 好的,那么回滚。
    【解决方案2】:

    请注意,对于从 Google 获取这里的任何人,Gulp 4 的语法已更改。您应该改为执行以下操作:

    gulp.watch('src/**/*', {events: ['add']}, gulp.series('index'));
    

    参考:https://gulpjs.com/docs/en/api/watch#options

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-09
      • 2017-04-25
      相关资源
      最近更新 更多