如果输入文件丢失,有没有办法导致 Grunt 插件失败
Is there a way to cause a Grunt plugin to fail if input files are missing?
我一直在使用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'
]
}
}
}
有一段时间这工作正常;但我把它移到另一台机器上,没有正确设置我的 bower 组件 - html5-boilerplate/css/main.css
文件丢失 - 但任务仍然成功完成。事实上,我可以在该数组中放置完全假的路径,并且缩小仍然完成。
一般来说,如果有办法导致 Grunt 失败并在这样的数组中丢失文件时退出?(我不确定文件数组是通用的 Grunt 概念还是 cssmin 提供的概念)。如果没有,有没有办法导致这个特定的插件失败?
(顺便说一下,我知道HTML5样板现在可能有些过时,但我正在迁移一个旧网站。我还修复了我的 Bower 安装过程,以便它现在自动在此步骤之前运行。不过,我仍然想了解丢失文件问题的更通用的解决方案)。
在文件数组格式中,如果文件不存在,您可以使用 nonull: true
引发警告:
files: [
{
src: [
'a.js',
'b.js',
],
dest: 'c.js',
nonull: true
}
]
现在通过将 grunt.log.warn 包装在您自己的函数中来强制 Grunt 停止警告:
var gruntLogWarn = grunt.log.warn;
grunt.log.warn = function(error) {
gruntLogWarn(error); // The original warning.
grunt.fail.warn('Stop! Hammer time.'); // Forced stop.
};
以上将在任何警告时停止。但是,如果缺少源文件,我们希望停止。过滤"源文件...未找到。
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
。
要在文件丢失时触发错误,您可以改为创建过滤器函数。
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匹配正则表达式
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- 如何将package.json数组传递给grunt.js
- 当json解析空响应时,Whatwg-Fetch失败,我该如何防止它
- Grunt browserfy在需要react bootstrap typeahead时失败
- 全局安装grunt失败,我可以'在npmjs.org上找不到
- 如果输入文件丢失,有没有办法导致 Grunt 插件失败
- travis-ci 在 grunt-contrib-imagemin 任务上构建失败(无法准备好未定义的属性“内容”
- $grunt构建控制失败:找不到页面jit grunt
- Angular主存储库运行grunt测试失败;的任务
- Grunt失败,提示“无法找到模块”.对于本地模块
- Grunt在识别失败时发出警告:" warning: Arguments to path.Join必须是字符串
- 如果JSHint在监视任务期间失败,如何使Grunt构建失败
- Grunt-code-coverage-enforcer在阈值限制下不会失败
- Grunt-mocha -断言在$.得到失败
- 由于注释掉的代码中的解析错误,导致grunt失败
- Grunt useminPrepare和usemin无法处理多个任务和文件(concat失败)
- 为什么通过Grunt运行Google JavaScript Linter会失败
- Grunt -没有图像库工作.所有人都在默默地失败
- QUnit测试在Travis CI上失败(在phantomjs上运行grunt.js)