如果输入文件丢失,有没有办法让Grunt插件失败?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果输入文件丢失,有没有办法让Grunt插件失败?相关的知识,希望对你有一定的参考价值。
我一直在使用Grunt cssmin plugin。我的Gruntfile中有一个块看起来像这样:
cssmin: {
target: {
files: {
'<%= config.target %>/mytarget.css': [
'bower_components/normalize.css/*.css',
'bower_components/html5-boilerplate/css/main.css',
'<%= config.src %>/css/*.css'
]
}
}
}
有一段时间,这工作正常;但是我把它移到另一台机器上并且没有正确设置我的凉亭组件 - 缺少html5-boilerplate/css/main.css
文件 - 然而任务仍然成功完成。事实上,我可以在该数组中放置完全虚假的路径,并且缩小仍然完成。
一般来说,有没有办法导致Grunt失败并退出,如果这样的数组中缺少文件? (我不确定文件数组是一般的Grunt概念还是cssmin提供的概念)。如果没有,有没有办法导致这个特定的插件失败?
(顺便说一句,我知道HTML5 Boilerplate现在可能有点过时了,但我正在迁移一个旧网站。我还修复了我的Bower安装过程,以便它现在在此步骤之前自动运行我仍然想要了解丢失文件问题的更通用的解决方案。
在files array format中,如果文件不存在,您可以使用nonull: true
发出警告:
files: [
{
src: [
'a.js',
'b.js',
],
dest: 'c.js',
nonull: true
}
]
Now force Grunt to stop通过将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.
};
以上将停止任何警告。但是如果缺少源文件,我们想要停止。在'源文件...未找到'上过滤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);
}
};
你可以在cssmin
之前创建一个任务。
grunt.task.registerTask('checkIfFilesExist','',function(){
// Check for those files here. Throw if something's wrong.
});
grunt.task.registerTask('checkBeforeDoingStuff',[
'checkIfFilesExist',
'cssmin'
]);
而且,iirc,您可以通过<% %>
引用它们,在cssmin任务中重用相同的参数。
Grunt选项nonull: true
应该处理这个问题,但它并不总是适用于所有任务。对我而言,它适用于htmlmin
,phpmin
但不适用于cssmin
和uglifyJS
。
要在文件丢失时触发错误,您可以创建一个filter函数。
var checkFileExists = function(filepath) {
if (!grunt.file.exists(filepath)) {
grunt.fail.warn('Could not find file: ' + filepath);
} else {
return true;
}
};
{ src: ['<%= meta.srcPath %>/index.php'], dest: '<%= meta.deployPath %>/index.php', filter: checkFileExists, nonull: true},
使用上面的脚本,它现在可以完美地完成我测试的每个任务。
以上是关于如果输入文件丢失,有没有办法让Grunt插件失败?的主要内容,如果未能解决你的问题,请参考以下文章