1

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

-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是我希望用于“当前迭代的目录”的属性

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

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

谢谢!

4

1 回答 1

1

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

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

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

</foreach>

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

于 2013-03-13T23:28:41.167 回答