Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Автоматическое объединение нескольких зависимостей bower.json

Автор вопроса: sasha.sochkaОтветов: 2

У меня сложная архитектурная проблема с bower. Я создаю онлайн-платформу, где пользователь создает страницы с помощью динамических виджетов, содержащих JS-код. Эти виджеты имеют предопределенный формат, описание, значки и т. д., они будут упакованы в архив (например, apk, war, jar, ear, но с интерфейсным кодом). Пользователи смогут динамически добавлять виджеты, когда веб-сайт уже развернут.

Мы используем bower, и проблема заключается в следующем: виджеты также должны иметь возможность указывать свои bower зависимости.

Упрощенная структура каталога выглядит следующим образом:

  • Bower.json
  • gulpfile.js (используется для создания веб-сайтов)
  • bower_components # собственные зависимости + зависимости от всех виджетов
  • widgets
    • widget1 # any name is possible here
    • виджет2
    • случайный виджет
    • another-widget # for each of the widgets above the layout is the same
      • bower.json (or simplified version like dependencies.json which contains only dependencies list).
      • много других файлов

После загрузки виджета bower.json должен быть объединен со всеми зависимостями от других виджетов, gulp build запустится и перестроит все это.

Как объединить все Bower.json в один? Особенно, когда есть одна и та же зависимость дважды, например. один виджет зависит от "jquery": "<=2.1.0", а другой виджет зависит от "jquery": "^2.1.0". Они оба совместимы, но какую строку мне написать в bower.json? Если я напишу оба, то Bower использует только второй и установит последнюю версию jquery - 2.1.1, которая уже не совместима с первым виджетом. И это более простой вариант использования.

На самом деле мы можем предположить, что будут не все возможные варианты спецификации semver, например, <=. Я также могу заставить авторов виджетов использовать мою собственную спецификацию зависимостей, но я не могу придумать, как ее разработать.

Любая помощь приветствуется!

Другие подходы к решению зависимостей виджетов принимаются, но обратите внимание: они не могут иметь свои собственные версии библиотек, потому что во время выполнения загружается несколько виджетов. Например, я не могу иметь два jquery одновременно только потому, что два виджета используют спецификации, как в примере выше.

UPD: я знаю о RequireJS и использую его. Но сначала мне нужно скачать саму зависимость, чтобы потом использовать ее с RequreJS.

dependenciesbuildjavascriptgulpbower

Ответы

Ответ 1 · рейтинг 2 · sasha.sochka

Решение было следующим:

каждый виджет представляет собой пакет Bower с его файлом bower.json; Bower.json проекта переименовывается в bower-base.json, а bower.json генерируется из bower-base.json со всеми виджетами, добавленными в свойство зависимостей. Затем Bower автоматически обрабатывает зависимости виджета.

Ответ 2 · Jaybill

Есть ли причина, по которой это нужно делать с беседкой? Bower на самом деле не предназначен для зависимостей времени выполнения. Для этого вы можете использовать что-то вроде RequireJS.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы