YUI-Compressor: файл результатов пуст - PullRequest
1 голос
/ 06 июля 2011

Я использую библиотеку 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 есть некоторые ошибкииспользуя СМИ, но может ли это быть связано с пустыми результатами?

Ответы [ 2 ]

3 голосов
/ 15 июля 2011

Ну, после некоторого времени отладки я нашел решение.

Проблема заключалась не в самом YUI Compressor, а в том, что FileWriter был передан методу.

  • Очистка закрытия FileWriter должен решить проблему с пустыми результирующими файлами
  • , так как мне нужна только уменьшенная строка для дальнейшей обработки. Теперь я использую StringWriter с закрытием и сбросом
3 голосов
/ 07 июля 2011

У меня была такая же проблема. В моем случае это произошло из-за того, что мой код javascript не был допустимым ECMA (мы используем переменную с именем double, которая не разрешена в соответствии с правилами ECMA).

У меня не хватило смелости проверить, действителен ли ваш js, но попытка сжать различные части вашего файла js может легко привести вас к проблеме, если она существует.

...