【问题标题】:Watching for deleted files with grunt使用 grunt 监视已删除的文件
【发布时间】:2016-04-15 04:06:42
【问题描述】:

使用 grunt-watch 监视文件的更改对于添加/更改操作非常有用,因为当它使用更改列表调用任务时,任务的 files(或 fileSrc)属性将包含添加/更改的文件.

删除的文件并非如此。如果您监视已删除的文件并调用任务,则已删除的文件将不会出现在任务的 filesSrc 属性或 files 属性的规范化部分中。

除了手动规范特定files 元素的orig 属性外,有没有办法强制删除的文件出现在fileSrc 或files 的规范化部分?如果不是,那么标准化orig 的最佳方法是什么(我不想重新发明轮子)?

【问题讨论】:

    标签: gruntjs delete-file grunt-contrib-watch


    【解决方案1】:

    很可能该插件有意从文件数组中转储已删除的文件,但是该插件确实会发出一个watchevent,您可以收听:

    grunt.initConfig({
      watch: {
        scripts: {
          files: ['**'],
        },
      },
    });
    grunt.event.on('watch', function(action, filepath, target) {
      if (target === 'scripts' && action === 'deleted') {
        // your code goes here
      }
    });
    

    还有一些方法可以设置特定的监视任务,当监视程序检测到删除时运行特定任务。这两种方法都列在plugin's documentation 中。

    【讨论】:

    • 是的,我使用了“按需编译文件”中描述的技术。 watch 事件的问题在于只能有一个全局 watch 侦听器,如果您同时运行多个监视目标,则无法知道特定事件来自哪个目标。
    • 例如,如果您以他们的 jslint 为例,假设您需要运行另一个监视目标,该目标执行类似于 jslint(称为 jslint2)但在一组单独(但重叠)的文件上,监视侦听器别无选择,只能同时运行 jslint 和 jslint2 来处理两组联合中的任何文件更改(否则它可能会丢失其中一个目标中的某些文件)。但这意味着某些文件可能会被 jslint'ed(或 jslint2'ed),而这是不应该的。
    • 更改条件以检查目标:if (target === 'jslint' && action === 'deleted')
    • 完美,谢谢!您可以将其添加为您的答案的一部分,我会从那里接受吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 2018-01-26
    • 2016-11-23
    • 1970-01-01
    相关资源
    最近更新 更多