自动删除HTML和Javascript评论

时间:2013-01-30 09:02:52

标签: javascript html comments

我想自动删除HTML和JavaScript评论。我在服务器上使用ant-scripts进行部署和JSF。有哪些选项或工具?提前谢谢。

4 个答案:

答案 0 :(得分:1)

您可以使用正则表达式轻松删除它们。例如,您可以通过将正则表达式/\<!--(.*)-\>/gi的匹配替换为空来删除HTML注释。

答案 1 :(得分:1)

decomment完全按照您的描述执行 - 从JSON,JavaScript,CSS,HTML等中删除注释。

要在gulp系统中使用,请参阅gulp-decomment

答案 2 :(得分:0)

制作新目标并使用replaceregexp替换这些文件中您不想要的所有评论和其他内容。

你可以做某事。就像html和js类似的东西:

<target name="-trim.html.comments">

    <fileset id="html.fileset"
        dir="${build.dir}"
        includes="**/*.jsp, **/*.php, **/*.html"/>

    <!-- HTML Comments -->
    <replaceregexp replace="" flags="g"
        match="\&lt;![ \r\n\t]*(--([^\-]|[\r\n]|-[^\-])*--[ \r\n\t]*)\&gt;">
        <fileset refid="html.fileset"/>
    </replaceregexp>

</target>

来源:http://www.julienlecomte.net/blog/2007/09/23/

答案 3 :(得分:0)

将HTML和JavaScript混合使用正则表达式的文件中的注释替换是有风险的。但是,单独地,您可以在不依赖外部工具的情况下获得良好的性能,只需要node.js:

对于HTML评论,请使用正则表达式/<!--(?!>)[\S\s]*?-->/g。例如:

function stripHtmlComments(content) {
  return content.replace(/<!--(?!>)[\S\s]*?-->/g, '');
}

删除JavaScript注释有点复杂,你需要混合几个正则表达式来区分注释在文字字符串或正则表达式中,以及当斜杠属于正则表达式时:)

这个小程序从JavaScript文件中删除了多行和单行注释:

#!/usr/bin/env node
/*
  Removes multiline and single-line comments from a JavaScript source file.
  Author: aMarCruz - https://github.com/aMarCruz
  Usage: node [this-tool] [js-file]
*/
var path = require('path'),
    fs = require('fs'),
    file,
    str;

var RE_BLOCKS = new RegExp([
    /\/(\*)[^*]*\*+(?:[^*\/][^*]*\*+)*\//.source,           // $1: multi-line comment
    /\/(\/)[^\n]*$/.source,                                 // $2 single-line comment
    /"(?:[^"\\]*|\\[\S\s])*"|'(?:[^'\\]*|\\[\S\s])*'/.source, // string, don't care about embedded eols
    /(?:[$\w\)\]]|\+\+|--)\s*\/(?![*\/])/.source,           // division operator
    /\/(?=[^*\/])[^[/\\]*(?:(?:\[(?:\\.|[^\]\\]*)*\]|\\.)[^[/\\]*)*?\/[gim]*/.source
    ].join('|'),                                            // regex
    'gm'  // note: global+multiline with replace() need test
    );

file = process.argv[2];
if (!path.extname(file))
    file += '.js';
str = fs.readFileSync(file, { encoding: 'utf8' });

console.log(stripJSComments(str));

// remove comments, keep other blocks
function stripJSComments(str) {
    return str.replace(RE_BLOCKS, function (match, mlc, slc) {
        return mlc ? ' ' :     // multiline comment (must be replaced with one space)
               slc ? '' :      // single-line comment
               match;          // divisor, regex, or string, return as-is
        });
}

现在(示例)保存为rcomms并运行:

node rcomms source-file > clean-file.js

注意: 此代码基于jspreproc的正则表达式,如果您需要更高级的处理,请访问http://github.com/aMarCruz/jspreproc

我写了jspreproc来部署一些riot模块。 jspreproc删除空行,支持用于保留一些注释的过滤器和C风格的条件注释:#if-else,endif,#define,#include等。