문제

I have a directory structure like so:

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

I'm trying to loop each directory in Phing, and subsequently minify each file into a single hashed filename within each directory using the YUI compressor. The result would look something like this:

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

I therefore need to know each directory that I'm within so I can output my minified scripts to it.

These are my two targets:

<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>

Where:

  • yuicompressor is the path to the yui compressor jar
  • publicdir is just an absolute path to my applications public directory
  • abspathtopwd is the property I wish to use for the "current iteration's directory"

How can I get the current working directory (or pwd if you prefer) in the current foreach iteration with Phing? All I can see I have access to is the relative and absolute paths to the files themselves.

Note: I'm aware that this current solution would create a new file for each input file, but that's what I'm aiming to fix with abspathtopwd.

Thanks!

도움이 되었습니까?

해결책

For anyone interested in this problem, check out this post, which led me to:

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

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

</foreach>

This allows me to specify a directory constraint when iterating, thus passing through the relative and absolute directory name as opposed to the filename.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top