Имеется: 160 CSS файлов, 327 JavaScript файлов
Задача: За короткое время, файлы, которые раскиданы по разным папкам, сжать YUI Compressor'ом!
Времени на написание, либо интегрирование специальных систем нет, поэтому было решено реализовать на win cmd
Решение задачи было разделено на несколько подзадач:
Упаковка
- Реккурсивный проход по папкам в поисках файлов с расширением *.css|*.js
- Оригинальный файл копируется в файл filename.(css|js).unpacked
- Упаковка очередного файла YUICompressor'ом
- Оригинальный файл заменяется сжатым
Распаковка
- Реккурсивный проход по папкам в поисках файлов с расширением *.unpacked
- Файл filename.(css|js).unpacked копируется в файл filename.(css|js)
- Файл filename.(css|js).unpacked удаляется
Примочки
- Упаковка и Восстановление логируется
- Путь к YUI, каталог с дистром, расширение unpacked файла, путь к log файлам регулируется в переменных в верху батника
Как использовать?
- Кидаем файлик в корневой каталог дистрибутива, в подпапках которого есть файлы сss/js
- Указываем путь к YUI Compressor (или у к своему инструменту)
- Запускаемstart_packing.bat
Распаковка
- Запускаем start_restore.bat
Заточка
- Замените в файле start_packing.bat cтроку №26 на свой инструмент
java -jar %YUI_DIR%/build/yuicompressor-2.4.6.jar %%i -o %%i
Deploy
- Перед заливкой в рабочую версию настроил в FileZilla (Вид->Фильтры по названию файлов) исключение на передачу файлов оканчивающихся на *.unpacked
- Залил
- Затем в dev версии восстанавливаем сжатые файлы
- Получается так, что в Production'е сжатые файлы, а в деве остаются оригинальные
Листинг
Файл start_packing.bat - упаковка
- @echo off
- @SET DISTR_DIR=.
- @SET UNPACKED_FILE_EXT=unpacked
- @SET LOG_FILENAME=D:\work\webapps\citylife_packed\logs\log_%DATE%.txt
- @SET YUI_DIR=D:\work\webapps\yui
- echo [ %DATE% as %TIME% ]
- echo Start of packing files in directory "%DISTR_DIR%"
- echo.
- @echo Start of packing files in directory: "%DISTR_DIR%" >> %LOG_FILENAME%
- @echo.>>%LOG_FILENAME%
- @echo.>>%LOG_FILENAME%
- FOR /R %%i IN (*.css, *.js) DO (
- @echo [ %%i ] >> %LOG_FILENAME%
- @echo - %TIME%: backuped as "%%i.%UNPACKED_FILE_EXT%" >> %LOG_FILENAME%
- java -jar %YUI_DIR%/build/yuicompressor-2.4.6.jar %%i -o %%i
- @echo - %TIME%: successfully packed >> %LOG_FILENAME%
- echo.>>%LOG_FILENAME%
- echo.>>%LOG_FILENAME%
- )
- echo.
- echo [ %DATE% at %TIME% ]
- @echo [ %DATE% at %TIME% ] >> %LOG_FILENAME%
- echo.>>%LOG_FILENAME%
- echo.>>%LOG_FILENAME%
- pause
Файл start_restore.bat - распаковка
- @echo off
- @SET DISTR_DIR=files
- @SET UNPACKED_FILE_EXT=unpacked
- @SET LOG_FILENAME=D:\work\webapps\citylife_packed\logs\log_restore_%DATE%.txt
- echo [ %DATE% as %TIME% ]
- echo Start of RESTORE packing files in directory "%DISTR_DIR%"
- echo.
- @cd %DISTR_DIR%
- @echo Start of RESTORE packing files in directory: "%DISTR_DIR%" >> %LOG_FILENAME%
- @echo.>>%LOG_FILENAME%
- @echo.>>%LOG_FILENAME%
- FOR /R %%i IN (*.css, *.js) DO (
- @echo %%i>> %LOG_FILENAME%
- del %%i.%UNPACKED_FILE_EXT%
- @echo %TIME%: successfully restored>> %LOG_FILENAME%
- @echo.>>%LOG_FILENAME%
- @echo.>>%LOG_FILENAME%
- )
- echo.
- echo [ %DATE% at %TIME% ]
- @echo [ %DATE% at %TIME% ] >> %LOG_FILENAME%
- echo.>>%LOG_FILENAME%
- echo.>>%LOG_FILENAME%
- pause
Скорость
- 160 CSS файлов - сжато за 50 секунд
- 327 JavaScript файлов - сжато за 3 минуты