如果输入文件丢失,有没有办法让Grunt插件失败?

And*_*ier 5 javascript gruntjs

我一直在使用Grunt cssmin插件.我的Gruntfile中有一个块看起来像这样:

cssmin: {
    target: {
        files: {
            '<%= config.target %>/mytarget.css': [
                'bower_components/normalize.css/*.css',
                'bower_components/html5-boilerplate/css/main.css',
                '<%= config.src %>/css/*.css'
            ]
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有一段时间,这工作正常; 但是我把它移到另一台机器上并且没有正确设置我的凉亭组件 - html5-boilerplate/css/main.css文件丢失了 - 然而任务仍然成功完成.事实上,我可以在该数组中放置完全虚假的路径,并且缩小仍然完成.

一般来说,有没有办法导致Grunt失败并退出,如果这样的数组中缺少文件?(我不确定文件数组是一般的Grunt概念还是cssmin提供的概念).如果没有,有没有办法导致这个特定的插件失败?

(顺便说一句,我知道HTML5 Boilerplate现在可能有点过时了,但我正在迁移一个旧网站.我还修复了我的Bower安装过程,以便它在此步骤之前自动运行现在.我仍然想要了解丢失文件问题的更通用的解决方案.

all*_*aps 5

文件数组格式中,nonull: true如果文件不存在,您可以使用它来发出警告:

files: [
  {
    src: [
      'a.js',
      'b.js',
    ],
    dest: 'c.js',
    nonull: true
  }
]
Run Code Online (Sandbox Code Playgroud)

现在强制Grunt通过将grunt.log.warn包装在您自己的函数中来停止警告:

var gruntLogWarn = grunt.log.warn;
grunt.log.warn = function(error) {
    gruntLogWarn(error); // The original warning.
    grunt.fail.warn('Stop! Hammer time.'); // Forced stop.
};
Run Code Online (Sandbox Code Playgroud)

以上将停止任何警告.但是如果缺少源文件,我们想要停止.在'源文件...未找到'上过滤Grunt警告:

var gruntLogWarn = grunt.log.warn;
grunt.log.warn = function(error) {
  var pattern = new RegExp("^Source file (.*) not found.$");
  if (pattern.test(error)) {
    grunt.fail.warn(error);
  } else {
    gruntLogWarn(error);
  }
};
Run Code Online (Sandbox Code Playgroud)