如何使用YUI压缩器自动压缩JavaScript文件?

13

YUI Compressor不支持通配符参数,因此我不能像这样运行它:


C:>java -jar yuicompressor.jar *.js

但我有超过500个文件,不想像这样创建批处理文件:

C:>java -jar yuicompressor.jar file1.js -o deploy\file1.js
C:>java -jar yuicompressor.jar file2.js -o deploy\file2.js
...
C:>java -jar yuicompressor.jar file500.js -o deploy\file500.js

当然,我的文件名并不是如此统一的。

有没有一种方法可以在不编写任何代码的情况下自动化这个过程? :)


1
YUICompressor从2.4.4版本开始支持通配符。请参见以下下载链接。 - hazerd
6个回答

12

我可能会选择使用makefile(我认为从长远来看它可能更易于维护),但如果你想要一个快速而简单的Windows批处理命令,可以尝试以下方式:

for %%a in (*.js) do @java -jar yuicompressor.jar "%%a" -o "deploy\%%a"

如果文件名中没有空格,它的工作效果很好。谢谢! - z-boss
你应该能够在其中添加引号 - 我会进行编辑。 - Michael Burr
没错,就是这样!我需要克服的最后一件事是能够从文件夹A运行此批处理文件,在文件夹B中拥有所有.js文件,并将输出文件放入文件夹C中。 - z-boss
我担心这可能会陷入“高级批处理地狱”……您可以使用%1 %2 %3等来为批处理文件设置位置参数。然而,当您开始尝试组合和引用可能包含空格的实体时,这就会遇到巨大的问题。随之而来的是疯狂。 - Michael Burr
无论如何,还是谢谢。我总是可以从包含所有.js文件的文件夹中运行我的批处理文件。所以,这并不是关键问题。 - z-boss
运行两次会导致已经被压缩的文件再次被压缩,文件名会变成.min.min.min.js等等。你可以通过只压缩尚未被压缩的文件来避免这种情况吗? - Diego

5

从2.4.4版本开始,YUI压缩器现在支持通配符。您可以从这里YUI Git Hub获取最新版本。


5

如果您偏向于Java,也可以使用Ant进行转换。我发现了一篇关于博客文章的内容,其中包括YUI压缩器的Ant任务。免责声明:从未尝试过-抱歉


另一个Ant任务可以在https://bitbucket.org/m6_russell_francis/yui-compressor-ant-task找到。我在几个项目中使用它来自动压缩js/css文件。作为作者,我可能有点偏见。 - Russ

4

我应该提到,使用GNU Make,我有以下规则:

%-min.js: %.js
    ${java} -jar ${compressor} $< -o ${<:.js=-min.js}

为什么你使用${<:.js=-min.js}而不是 $@ - user663031
因为我对GNU Make的很多东西都不了解。 - foxxtrot

2

对于Unix或Cygwin,您可以使用xargs或类似的工具:

ls -1 *.js | awk '{printf("java -jar yuicompressor.jar %s -o deploy/%s",$1,$1)}'

当您对命令行满意时,请将其传输到/bin/sh以执行。


对于递归版本,请使用find而不是ls。 - Ed Kirk

1

你需要使用某种脚本来获取所有.js文件的列表,然后对它们运行YUI压缩器。在Windows命令提示符中,可以尝试以下命令:

FOR %f IN (*.js) DO java -jar yuicompressor.jar %f -o deploy\%f

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接