Недавно решал проблему с компиляцией статики в Erlang приложениях и, думаю, разобрался. За пару дней нашел хорошую замену Sprockets, написанную для nodejs, сделал пару кастомных бинарников и сделал pull request с новой командой для mad. А так как мой английский уровня школьника, я решил написать статью на русском, ожидая, что из нее скомпилируют документацию :)
Asset Pipeline
В файлы статики мы можем инклюдить другие файлы, например в application.js
:
//= require main
//= require lib/jquery
//= require_self
Будут включены main.js
, lib/jquery.js
из priv/source/js
, а затем и сам application.js
. Почитать об этом подробнее можно в документации mincer.
Поддерживаются Stylus, LESS, Sass (только scss синтаксис), CoffeeScript, React JSX. CSS файлы обрабатываются autoprefixer и сжимаются с помощью csso, а JS файлы сжимаются утилитой uglifyjs. Подробнее о языках и как именовать файлы можно почитать здесь.
MAD
Модуль mad_static
в mad собирает информацию о компиляции необходимых ассетов из rebar.config с ключем static
:
% rebar.config
{static, [
{files, ["application.js", "application.css"]},
{assets_port, 3005}
]}.
В files
мы указываем какие файлы компилировать из директорий priv/source/js
и priv/source/css
. Значение assets_port
указывает на каком порту нужно запускать сервер для компиляции в реальном времени, если параметр не указан - запускается на порту 3000.
Чтобы все это дело скомпилировать нужно запустить mad static
, в результате в директории priv/static
будут лежать два файла — application.css
и application.js
.
mad static watch
запускает сервер:
GET http://localhost:3000/application.js
GET http://localhost:3000/application.css
Только тут есть проблема, если выйти с помощью Ctrl+C то сервер не остановится и порт будет занят до тех пор, пока не сделать еще один запрос к нему. Решить эту проблему так и не смог.
Скоро будет плагин для Rebar.