在Phing中迭代文件结构并使用YUICompressor进行压缩

时间:2013-03-13 19:12:14

标签: phing yui-compressor

我有一个像这样的目录结构:

-css
---subdir1
------common.css
---subdir2
------common.css
------custom.css
---subdir3
------common.css
------styles.css

我正在尝试遍历Phing中的每个目录,然后使用YUI压缩器将每个文件缩小为每个目录中的单个散列文件名。结果看起来像这样:

-css
---subdir1
------1973a613f7c87b03dbe589e6935a09bd.min.css
---subdir2
------1973a613f7c87b03dbe589e6935a09bd.min.css
---subdir3
------1973a613f7c87b03dbe589e6935a09bd.min.css

因此我需要知道我所在的每个目录,以便我可以将缩小的脚本输出到它。

这是我的两个目标:

<target name="minify">

    <echo msg="Minifying CSS and JS files with YUI at ${yuicompressor}" />

    <foreach param="filename" absparam="absfilename" target="runyui">

        <fileset dir="${publicdir}/css">
            <include name="*.css" />
            <include name="**/*.css" />
        </fileset>
    </foreach>

</target>

<target name="runyui">

    <filehash file="${abspathtopwd}" hashtype="MD5" propertyname="filehash" />

    <echo msg="java -jar ${yuicompressor} -v --line-break 5000 --type css ${absfilename} >> ${abspathtopwd}/${filehash}.min.css" />

    <exec command="java -jar ${yuicompressor} -v --line-break 5000 --type css ${absfilename} >> ${abspathtopwd}/${filehash}.min.css" />

</target>

其中:

  • yuicompressor 是yui压缩机jar的路径
  • publicdir 只是我的应用程序公共目录的绝对路径
  • abspathtopwd 是我希望用于“当前迭代目录”的属性

如何在Phing的当前foreach迭代中获取当前工作目录(如果您愿意,还可以获得pwd)?我所能看到的只是文件本身的相对和绝对路径。

注意:我知道这个当前的解决方案会为每个输入文件创建一个新文件,但这就是我打算用 abspathtopwd 来解决的问题。

谢谢!

1 个答案:

答案 0 :(得分:1)

对于对此问题感兴趣的任何人,请查看this post,这导致我:

<foreach param="dir" absparam="absdir" target="minify.directory">

    <fileset dir="${publicdir}/css">
        <type type="dir" />
        <depth max="0" min="0" />
    </fileset>

</foreach>

这允许我在迭代时指定目录约束,从而传递相对和绝对目录名而不是文件名。