确保您拥有每个文件版权的Grunt任务

时间:2013-08-19 12:49:26

标签: gruntjs

我需要确保每个文件开头都有版权声明。

如果缺少版权声明,我如何使用grunt使构建失败?

3 个答案:

答案 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可能是你想要的。您定义要检查的正则表达式,如果找到它,则任务失败。