1

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

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

4

3 回答 3

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');
})
于 2013-08-23T12:01:48.223 回答
1

与其检查它是否存在并失败,为什么不只是有一个自动注入它的任务呢?参见grunt-banner

于 2013-08-19T12:51:48.957 回答
0

https://github.com/thekua/grunt-regex-check可能是您想要的。您定义要检查的正则表达式,如果找到它,则任务失败。

于 2013-08-23T18:55:27.020 回答