Как заставить Bower собрать пакет?

Есть ли способ заставить Bower запускать пакет после того, как он был клонирован с GitHub?

Я пытаюсь использовать Bower, но одним из пакетов, которые я использую, является расширение Bootstrap, x-editable. Проблема в том, что в то время как другие пакеты отправляют полностью собранную версию на github, поэтому при установке Bower у вас есть встроенная версия, редактируемая x, ожидая, что вы запустите файл grunt для сборки пакета.

Это обычная практика в других менеджерах пакетов, таких как npm, но я смог найти, как заставить Bower собирать его при установке. Это означает, что мне нужен другой механизм для завершения установки пакета.


person Guy Korland    schedule 18.06.2013    source источник


Ответы (3)


Создание на основе установки является антишаблоном и настоятельно рекомендуется против него в Node. Как и Node, пакеты Bower должны быть предварительно собраны. Это связано с тем, что конечному пользователю не нужно заботиться о том, какой препроцессор или система сборки требуется пакету.

Лучше всего либо убедить автора предварительно собрать, разветвить и сделать это самостоятельно, либо собрать вручную после того, как вы установили компонент.

Команда Bower планирует добавить возможность публиковать пакеты на сервере аналогично тому, как это работает в npm. Это сделает его намного лучше для пакетов, нуждающихся в шаге сборки.

person Sindre Sorhus    schedule 18.06.2013
comment
Большинство тяжелых пакетов в npm, которые я использую, имеют некоторую фазу сборки после установки. Использование предварительно созданного кроссплатформенного (обычно нативного) кода кажется еще худшим вариантом. Тем не менее, даже если Бауэр не поощряет это, я думаю, что этот вариант должен быть доступен для особых случаев. - person Guy Korland; 19.06.2013
comment
Собственные расширения являются исключением в Node, поскольку у них нет инфраструктуры для предварительной компиляции, но это рассматривается. Опция уже доступна. У Бауэра есть API. Таким образом, вы можете взломать свое собственное решение, но для обычного пользователя это не очень хороший выбор, и он никогда не будет рекомендован или поддерживаться в Bower. - person Sindre Sorhus; 19.06.2013
comment
@Sinder Мой вопрос: могу ли я принудительно выполнить фазу сборки пакета, который не был опубликован мной? например x-editable, который находится в репозитории Bower, но для его использования вам нужно запустить его grunt-файл. - person Guy Korland; 20.06.2013
comment
Как сказано в ответе, вы можете собрать его вручную после установки, cd войдя в папку компонента и запустив grunt. У Bower нет хуков до/после установки. - person Sindre Sorhus; 20.06.2013
comment
Я действительно не понимаю, как можно сказать, что это анти-шаблон. AFAICT Bower работает поверх git, и обычно считается плохой практикой хранить скомпилированные файлы в репозитории git. - person starwed; 17.07.2013
comment
@starwed смотрите мой обновленный ответ. Вы в целом правы, когда речь идет о повторно используемых модулях, но все, что можно развернуть, должно быть скомпилировано. Проблема, как вы указываете, заключается в том, что Bower работает над git, но удобство пользователя превосходит удобство разработчиков. - person Sindre Sorhus; 17.07.2013
comment
@SindreSorhus Я не согласен. 1) Сборка качественных пакетов невозможна без надлежащего контроля версий; размещение скомпилированного кода в репозитории компрометирует его, поэтому в конечном итоге это негативно влияет на пользователей. 2) Многие пользователи тоже являются разработчиками, и они вносят свой вклад в эти пакеты, так что это и для них удобно. Возможно, возможным автоматическим вариантом является публикация в беседке из какой-то ветки/ветки, которая передается из процесса сборки. Я думаю, что Bower должен либо предоставлять хранилище для пакетов, как это делает npm, либо разрешать сборку пакетов при установке, как это было раньше. - person esp; 27.02.2016

В беседке есть 3 крючка, постустановка может решить вашу проблему, если по какой-либо причине вы не можете выполнить предварительную сборку, как указывает @Sindre Sorhus.

В .bowerrc выполните:

{
    "scripts": {
        "preinstall": "<your command here>",
        "postinstall": "<your command here>",
        "preuninstall": "<your command here>"
    }
}

источник https://github.com/bower/bower/blob/master/HOOKS.md

person schurpf    schedule 22.09.2014

Вы можете использовать композитор для обработки после установки:

bower.json:

{
    "dependencies": {
        "bootstrap": "*"
    }
}

composer.json:

{
    "scripts" : {
        "post-install-cmd" : [
            "bower install --no-color",
            "lessc bower_components/bootstrap/less/bootstrap.less public/script/bootstrap.css"
        ]
    }
}

Затем я запускаю composer install:

Loading composer repositories with package information
Installing dependencies (including require-dev)
Nothing to install or update
Generating autoload files
bower warn Package bootstrap is still using the deprecated "component.json" file
bower cloning git://github.com/twitter/bootstrap.git
bower cached git://github.com/twitter/bootstrap.git
bower fetching bootstrap
bower checking out bootstrap#v2.3.2
bower warn Package jquery is still using the deprecated "component.json" file
bower copying C:\Users\renadm\AppData\Roaming\bower\cache\bootstrap\9d49e0aedf207bebd028e26cc86a9e58
bower cloning git://github.com/components/jquery.git
bower cached git://github.com/components/jquery.git
bower fetching jquery
bower checking out jquery#1.8.3
bower copying C:\Users\renadm\AppData\Roaming\bower\cache\jquery\29cb4373d29144ca260ac7c3997f4381
bower installing bootstrap#2.3.2
bower installing jquery#1.8.3

После завершения установки Bower компилятор LESS обрабатывает файлы .less и помещает красивый bootstrap.css в мою общую папку. нечто подобное можно сделать для файлов JavaScript с помощью Closure Compiler.

person Renaat De Muynck    schedule 12.07.2013
comment
Чем он отличается от использования любого другого инструмента сборки? как хрюканье? - person Guy Korland; 14.07.2013