0

我目前正在尝试创建一个应该执行以下操作的 ANT build.xml:

在 HTML 文件中查找所有出现的 <script src="foo.js"> 标记。获取该脚本文件的 src 属性并将相应的 js 文件复制到临时目录。然后将目录中的所有脚本连接起来,这样就会有一个大脚本。最后压缩脚本(使用 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>

到目前为止,buildscript 将从文件 if.html 中获取所有 javascripts 路径。我将在文件夹“${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 回答