我需要确保每个文件的开头都有版权声明。
如果缺少版权声明,如何使用 grunt 使构建失败?
首先,我假设您指的是*.js 或 *.html或其他类似的工作文件,而不是图形或二进制文件。
这可以通过以下方式完成grunt.registerTask
:
1. loop through all relevant files
2. Read and compare first line to copyright line
3. If different - re-write file but a new first line which will be the copyright info
很简单。再次 - 这不适用于二进制文件。我为你写了这个,但它看起来非常有用,我可能会考虑将它添加为插件。现场测试:
运行它grunt verifyCopyright
并确保如果您的文件位于不同的目录中,则更改它,并且如果您想处理其他文件,也将它们添加到列表中。祝你好运...
grunt.registerTask('verifyCopyright', function () {
var fileRead, firstLine, counter = 0, fileExtension, commentWrapper;
copyrightInfo = 'Copyright by Gilad Peleg @2013';
//get file extension regex
var re = /(?:\.([^.]+))?$/;
grunt.log.writeln();
// read all subdirectories from your modules folder
grunt.file.expand(
{filter: 'isFile', cwd: 'public/'},
["**/*.js", ['**/*.html']])
.forEach(function (dir) {
fileRead = grunt.file.read('public/' + dir).split('\n');
firstLine = fileRead[0];
if (firstLine.indexOf(copyrightInfo > -1)) {
counter++;
grunt.log.write(dir);
grunt.log.writeln(" -->doesn't have copyright. Writing it.");
//need to be careful about:
//what kind of comment we can add to each type of file. i.e /* <text> */ to js
fileExtension = re.exec(dir)[1];
switch (fileExtension) {
case 'js':
commentWrapper = '/* ' + copyrightInfo + ' */';
break;
case 'html':
commentWrapper = '<!-- ' + copyrightInfo + ' //-->';
break;
default:
commentWrapper = null;
grunt.log.writeln('file extension not recognized');
break;
}
if (commentWrapper) {
fileRead.unshift(commentWrapper);
fileRead = fileRead.join('\n');
grunt.file.write( 'public/' + dir, fileRead);
}
}
});
grunt.log.ok('Found', counter, 'files without copyright');
})
与其检查它是否存在并失败,为什么不只是有一个自动注入它的任务呢?参见grunt-banner。
https://github.com/thekua/grunt-regex-check可能是您想要的。您定义要检查的正则表达式,如果找到它,则任务失败。