1

我正在使用 YUI Compressor 库来缩小 CSS 和 JavaScript 文件。我直接使用 CssCompressor 和 JavaScriptCompressor 类。

不幸的是,一些生成的文件是空的,没有任何警告或异常。

我已经尝试过以下版本:

  • yuicompressor-2.4.2.jar
  • yuicompressor-2.4.6.jar
  • yuicompressor-2.4.7pre.jar

我使用的代码是:

public static void compress(File file) {

    try {
        long start = System.currentTimeMillis();
        File targetFile = new File("results", file.getName() + ".min");
        Writer writer = new FileWriter(targetFile);

        if (file.getName().endsWith(".css")) {
            CssCompressor cssCompressor = new CssCompressor(new FileReader(file));
            cssCompressor.compress(writer, -1);

        } else if (file.getName().endsWith(".js")) {
            JavaScriptCompressor jsCompressor = new JavaScriptCompressor(new FileReader(file), new MyErrorReporter());
            jsCompressor.compress(writer, -1, true, false, false, true);
        }

        long end = System.currentTimeMillis();
        System.out.println("\t compressed " + file.getName() + " within " + (end - start) +  " milliseconds");

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

不起作用的文件(之后为空)例如

我知道使用媒体的 YUICompressor 中存在一些错误,但这可能与空结果有关吗?

4

2 回答 2

3

好吧,经过一段时间的调试,我想出了一个解决方案。

问题不在于它本身的 YUI Compressor,而是赋予该方法的 FileWriter。

  • 刷新关闭 FileWriter 应该可以解决空结果文件的问题
  • 因为我只需要缩小的字符串进行进一步处理,所以我现在使用带有关闭和刷新的 StringWriter
于 2011-07-15T07:15:46.320 回答
3

我有同样的问题。在我的情况下,它源于我的 javascript 代码不是 ECMA 有效的(我们使用了一个名为 double 的变量,根据 ECMA 规则这是不允许的)。

我没有勇气检查您的 js 是否有效,但尝试压缩 js 文件的不同部分很容易导致您遇到问题(如果存在)。

于 2011-07-07T08:19:32.767 回答