Компиляция js. Google Closure Compiler (Docker)

0

В рамках оптимизации сайта «Ящик Пандоры», понадобилось компилировать ява скрипты на лету. Для этого можно использовать Докер контейнер с 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

Для того, чтобы с помощью этого контейнера компилировать свои ява скрипты, напишем простой шелл-скрипт jsmin.sh:

#!/usr/bin/env bash

# По умолчанию ищем файлы в текущей директории
work_dir=`pwd`

if [ -n "$1" ]; then
    # Смотрим, назначена ли директория в переменной
    work_dir=$1
fi

min_continue=".min.js"

for file in `find $work_dir -name '*.js'`; do    
    # Получаем имя файла
    name="${file##*/}"
    
    if [[ "$name" == *"$min_continue"* ]]; then
        # min-файл уже есть
        continue
    else
        min_name="${name//".js"/".min.js"}"
        min_path="$work_dir/$min_name"

        if [ -f $min_path ]; then
	   echo "Фай '$min_name' уже есть."
	else
	   echo "Файл '$min_name' не найден. Компилируем"
	   `docker run -i --rm -v $work_dir:/opt/scripts brahman/gcc --js /opt/scripts/$name --js_output_file /opt/scripts/$min_name`;
	fi
    fi

done

Запуск скрипта осуществляется командой:

bash jsmin.sh /your/file/path

По умолчанию скрипт ищет файлы в своём каталоге. Можно указать внешний каталог в качестве аргумента, в нашем случае это «/your/file/path».
Скрипт компилирует все js файлы, которые находит в каталоге, не содержащие в имени «.min.js».

Например, если необходимо откомпилировать «custom.js», находящийся в папке «var/www/custom/js», следует запустить скрипт компиляции командой:
bash jsmin.sh /var/www/custom/js

При запуске докер-контейнера, следите за тем, чтобы ваш пользователь имел право на такой запуск.

После компиляции, в целевой папке появляется файл «custom.min.js». Далее мы можем использовать минифицированный скрипт по своему усмотрению.

Поделиться:

Оставить комментарий

Вы вошли как Гость. Вы можете авторизоваться

Будте вежливы. Не ругайтесь. Оффтоп тоже не приветствуем. Спам убивается моментально.
Оставляя комментарий Вы соглашаетесь с правилами сайта.

(Обязательно)

Информация о сайте

Компания «Емельянов и партнёры» занимается разработкой, поддержкой и оптимизацией веб сайтов.

На данном сайте публикуются материалы по разработке сайтов и другим интересным вопросам.

Прежде чем приступать к просмотру сайта, ознакомьтесь с разделами:

Сайт может содержать контент, не предназначенный для лиц младше 18-ти лет.
Использование материалов сайта приветствуется при размещении активной ссылки на источник.

Со всеми вопросами и предложениями обращайтесь по почте info@emelianovip.ru