我需要确保每个文件开头都有版权声明。
如果缺少版权声明,我如何使用grunt使构建失败?
答案 0 :(得分:2)
首先,我假设您指的是 *。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');
})
答案 1 :(得分:1)
为什么不只是有一个自动注入它的任务,而不是检查它是否在那里并且失败了?请参阅grunt-banner。
答案 2 :(得分:0)
https://github.com/thekua/grunt-regex-check可能是你想要的。您定义要检查的正则表达式,如果找到它,则任务失败。