1

HTML と JavaScript のコメントを自動的に削除したい。サーバー上でデプロイメントと JSF に ant-scripts を使用しています。どのようなオプションやツールが利用できますか? 前もって感謝します。

4

4 に答える 4

2

HTML と JavaScript が混在するファイルのコメントを正規表現に置き換えるのは危険です。ただし、個別に、外部ツールに依存せずに、node.js だけで良好なパフォーマンスを実現できます。

HTML コメントには regex を使用します/<!--(?!>)[\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 にアクセスしてください

いくつかのriotモジュールをデプロイするためにjspreprocを書きました。jspreproc は空行を削除し、一部のコメントと条件付きコメントを C スタイルで保持するためのフィルターをサポートします: #if-else、endif、#define、#include など。

于 2015-09-25T18:22:47.283 に答える
1

正規表現を使用して簡単に削除できます。たとえば、正規表現の一致/\<!--(.*)-\>/giを何も置き換えないことで、HTML コメントを削除できます。

于 2013-01-30T09:07:56.507 に答える
0

新しいターゲットをreplaceregexp作成し、これらのファイルで不要なすべてのコメントやその他のものを置き換えるために使用します。

あなたはsthを行うことができます。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/

于 2013-01-30T09:08:05.327 に答える