Fesor
@Fesor
Full-stack developer (Symfony, Angular)

Сборка проекта, AMD, LMD, использование модулей проекта

Я не силен в сборке проектов на JavaScript, у меня это все обычно сводилось к использованию конкатенации файлов/минификации в grunt.js. А вот тут пришлось думать что да как делать.

Собственно пишу сейчас в свободное время одну библиотечку (для использования во браузере). Библиотека состоит из модулей, при необходимости в настройках библиотеки одни модули можно заменить другими. Сначала хотел использовать для этих целей require.js или же любой другой менеджер модулей. Но опять же встала проблема за сборкой библиотеки.

Каждый модуль сам по себе небольшой, в среднем где-то 150 строк. Модулей на данный момент штук 20, половину можно заменить своими. Названия используемых модулей описываются в настройках библиотеки, и потом через менеджер модулей (самописный, скопировано API require.js для совместимости). Опять же таскать require.js или любую другую подобную библиотеку очень не хочется, не хочу лишних зависимостей.

Каждый модуль обернут функцией define, и экспортирует один модуль. Опять же, есть желание ужать все это дело максимально сильно. Тоесть при сборке надо объеденить все экспорты в один и заключить все это дело в один define или же каждую логическую часть (ядро, компоненты, ui) в свой define.

Имеет ли это смысл, сталкивался ли кто-нибудь с проектами, где реализована подобная сборка, или же мне стоит подумать в другом направлении?
  • Вопрос задан
  • 5439 просмотров
Решения вопроса 1
azproduction
@azproduction
Использовать сборку и автоматизацию — однозначно стоит.

require.js имеет свой собственный сборщик модулй и оптимизатор — r.js

Достаточно много с ним работал из опыта могу сказать, что он хорош, но мне не подошел — муторно поддерживать проект на нем:
— это AMD, а значит нужно писать обертку define, колдовать если заходится использовать модуль в node.js… (можно не писать обертку, но придется опять колдовать)
— require() — God Object и возвращает всевозможные тип ресурсов всевозможными путями. Долго вникать что к чему если код чужой
— плагинная система у него странная для восприятия «с нуля»
— результат сборки сложно окинуть взглядом «все как-то само»

В общем, я устал от AMD и RequireJS, смотрел в сторону всевозможных подобных проектов тк мне не хотелось писать еще один велосипед. В итоге, мне пришлось написать инструмент своей мечты — LMD.

Исходил я из слудующих соображений:

* Сегодня все собирается. Даже dev
— зачем писать обертку и вобще писать что-то лишнее если за тебя это может сделать робот?!
* Читаемость кода очень важна
— Нужно исключить неявные конструкции
— Я как архитектор моего проекта хочу знать, что в нем будет «валяться»
* Сборок бывает много
— dev, production, dev-ru, test-en_US
* Нужен контроль результата сборки
— Проверка целостности
— Подробная информация о сборке
— Аналитика

Сегодня LMD умеет все то, что умеют другие сборщики, и имеет ряд преимуществ: CommonJS/Modules, честная и тотальная изоляция модулей, шикарная аналитика сборок как статическая так и динамическая, CLI с автокомплитом, GUI. LMD особенно хорош если у вас много сборок — много языков, много окружений.

Если вы используете grunt, то у LMD есть для него плагин — grunt-lmd.

Буквально на длях я написал целую кучу примеров к всевозможным плагинам и фичам LMD. Посмотрите их. Если будут вопросы задавайте тут или в ЛС.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы