Компиляция js. Google Closure Compiler (Docker)
В рамках оптимизации сайта «Ящик Пандоры», понадобилось компилировать ява скрипты на лету. Для этого можно использовать Докер контейнер с Google Closure Compiler.
Dockerfile контейнера достаточно прост:
FROM alpine:3.5 COPY resources/cc.sh /opt/cc.sh RUN apk add --no-cache --update openjdk8-jre curl unzip \ && curl https://dl.google.com/closure-compiler/compiler-20200719.zip >> /tmp/cc.zip \ && unzip -d /tmp /tmp/cc.zip c*.jar \ && cp /tmp/c*.jar /opt/closure-compiler.jar \ && rm /tmp/c*.jar \ && chmod +x /opt/cc.sh ENTRYPOINT ["/opt/cc.sh"]
Копируем последнюю версию gcc и запускаем cc.sh, со следующим содержимым:
#!/bin/sh -e CC="/opt/closure-compiler.jar" exec java -jar $CC $*
Собранный контейнер можно скопировать отсюда https://hub.docker.com/r/brahman/gcc
Для того, чтобы с помощью этого контейнера компилировать свои ява скрипты, напишем простой скрипт шелл compile.sh:
#!/usr/bin/env bash WORK_DIR="/var/www/yoursite/jsmin" for file in `find $WORK_DIR -name 'orig*'`; do name="${file##*/}" min_name="${nname//"orig."/"min."}" min_path="$WORK_DIR/$min_name" if [ -f $min_path ]; then echo "The file '$min_name' exists." else echo "The file '$min_name' in not found. Compile" `docker run -i --rm -v $WORK_DIR:/opt/scripts brahman/gcc --js /opt/scripts/$nname --js_output_file /opt/scripts/$min_name`; fi done
Скрипт находит в папке «/var/www/yoursite/jsmin» все файлы начинающиеся с «orig.», и создаёт для них компилированные версии с именами, начинающимися с «min.».
Например, если нам нужно откомпилировать «custom.js», мы копируем его в вышеуказанную директорию под именем «orig.custom.js», запускаем shell скрипт «compile.sh» и получаем «min.custom.js». Далее мы можем использовать минифицированный скрипт в своём проекте.