0

私は現在、次のことを行うANT build.xmlを作成しようとしています:

HTML ファイル内で出現する <script src="foo.js"> タグをすべて検索します。そのスクリプト ファイルの src 属性を取得し、対応する js ファイルを一時ディレクトリにコピーします。次に、1 つの大きなスクリプトになるように、ディレクトリ内のすべてのスクリプトを連結します。最後に、スクリプトを圧縮します (YUI コンプレッサーを使用)。私は ANT ビルドの経験はあまりありませんが、これが私がこれまでにやってきた方法です。

<target name="concat">
    <copy todir="${output.dir}/js/temp">
        <fileset dir="${src.dir}">
            <include name="if.html"/>
        </fileset>
        <filterchain>
            <linecontainsregexp>
                <regexp pattern="script.*src=&quot;(.*?)&quot;" />
            </linecontainsregexp>
            <tokenfilter>
                <replaceregex pattern=".*&lt;script.*src=&quot;(.*?)&quot;&gt;.*" replace="\1" />
            </tokenfilter>

        </filterchain>      
    </copy>

    <concat destfile="${output.dir}/js/application.js">
        <fileset dir="${output.dir}/js/temp" includes="*.js" />
    </concat>
</target>

これまで、ビルドスクリプトはファイル if.html からすべての JavaScript パスを取得していました。「${output.dir}/js/temp」フォルダーにファイル if.html を作成し、そこにすべてのパスを配置します。しかし、これは私が望むものではありません。すべてのスクリプト ファイルを「${output.dir}/js/temp」にコピーして、次のステップでそれらを連結できるようにします。

助けてくれてありがとう!

よろしく

4

1 に答える 1

1

最後に、「ant-contrib」と呼ばれる ANT プラグインを使用して動作するようにしました。これにより、ANT スクリプトで for ループを使用できるようになります。

  <loadfile property="file" srcfile="${output.dir}/js/temp/if.html"/>
  <for param="line" list="${file}" delimiter="${line.separator}">
          <sequential>       
            <concat destfile="${output.dir}/js/application.js" append="true">
                 <fileset dir="${src.dir}" includes="@{line}" />
            </concat>
            <echo message="Adding js ${src.dir}/@{line}"/>
          </sequential>
  </for>

これで、ファイルの行をループ処理して (各行は js ファイルへのパス)、ファイルの内容をメインの application.js に追加できます。

于 2012-08-01T12:06:43.247 に答える