Currently, people are managing dependencies, such as JavaScript libraries, manually. This sucks.
Крупные проекты как правило используют большое количество сторонних библиотек, таких как jQuery, Underscore, различные UI и плагины к ним, компонентные фреймворки и шаблоны к ним. Так вот, хранить весь этот сторонний код вместе с проектом не очень удобно. А, если еще учесть, что каждая библиотека должна иметь хотя бы 2 файла: минифицированый и отладочный, то структура проекта превращается в свалку, в которой уже довольно трудно разобраться. Да, частично решают вопрос git-ссылки репозитрия (когда мы не копируем контент, а ставим ссылку на репозиторий библиотеки), но это все равно не очень удобно. Хотелось бы совсем избавиться от этого стороннего кода в репозитории. Вот для этого и нужен bower.
По сути, вместо всех этих сторонних библиотек с помощью bower мы можем хранить в репозитории только инструкцию по их загрузке и потом при разворачивании проекта выполнить команду, которая подтянет все необходимые файлы к нам.
Bower написан на javascript для платформы node.js.
Устанавливается через npm:
npm install bower -g
После установки можно выполнить простую команду (в директории проекта):
bower install jquery
которая подгрузит к нам библиотеку jquery в ./components/jquery (по умолчанию)
Устанавливать библиотеки (пакеты) можно через:
- имя –
bower install jquery
- ссылка на git-репозиторий (полная)
bower install git://github.com/components/jquery.git
- ссылка на git-репозиторий (относительная)
bower install components/jquery
- http ссылка на файл
bower install http://foo.com/jquery.awesome-plugin.js
- локальный путь
bower install ./repos/jquery
Причем в случае, если это будет ссылка на архив, – bower сам распакует его содержимое.
Если нужна конкретная версия библиотеки, то это можно задать с помощью тега:
bower install jquery#1.8.1 bower install git://github.com/components/jquery.git#~1.8.1 bower install components/jquery#1.8.x
Кроме команды install, есть также команда update.
Для поиска по готовым пакетам существуют команды list и search. Также можно воспользоваться вот этим онлайн инструментом.
Теперь перейдем к самой интересной части – составлению конфиг файла для проекта, который подтянет все зависимости одной командой
bower install
Для этого в диретории проекта необходимо создать файл component.json, который по своей сути чем-то напоминает package.json(для npm), со следующим содержанием:
{
"name": "myProject",
"version": "1.0.0",
"dependencies": { "jquery": "~1.7.2" }
}
где name и version просто поля описательного характера, а вот параметр dependencies – основаная часть, в которой будем описывать все библиотеки для загрузки. В нашем случае это jQuery с указанием версии.
Еще есть никому не ясная опция main, которая подразумевает указание одного главного файла каждого типа(css, html, js) и которую разработчики заложили на будущее.
В реальном проекте блок зависимостей может выглядеть как-то так:
{
"angular-bootstrap": "0.1.0",
"angular-complete": "1.0.4",
"angular-ui": "0.4.0",
"chosen": "0.9.11",
"lodash": "1.0.0-rc.3"
}
также хочу обратить ваше внимание на то, что bower понимает вложенные зависимости. Если вы устанавливаете какой-то модуль, который зависит от jQuery, то нет необходимости отдельно прописывать установку jQuery, так как bower сам поймет что данную библиотеку необходимо установить.
Также можно добавлять свои пакеты(библиотеки) в репозиторий bower. Делается это следующей командой:
bower register myawesomepackagename git://github.com/maccmans/face
– т.е. указывается название пакета и путь к нему.
После чего вашу библиотеку можно будет также установить с помощью bower:
bower install myawesomepackagename
Если вас не полностью удовлетворяет стандартный функционал, который можно задать конфиг файлом, – то можете воспользоваться прекрасным набором bower api методов и расширить инструментарий.
var bower = require('bower');
bower.commands
.install(paths, options)
.on('end', function (data) {
data && console.log(data);
});
Все команды вызывают 3 типа событий: data, end, и error. Для install еще вызывается специальное событие package, которое говорит о том, что пакет был установлен.
Сам bower также имеет конфигурационный файл .bowerrc (не путать с файлом конфигурации компонент проекта – component.json). Также составлен в json формате и в нем мы можем задать следующие настройки:
{
"directory" : "components",
"json" : "component.json",
"endpoint" : "https://bower.herokuapp.com"
}
где
- directory – директория, куда будут загружается компоненты
- json – файл конфигурации компонент
- endpoint – позволяет запустить собственный Bower сервер-хранилище компонент
Если что-то еще осталось не ясно – задавайте вопросы – дополню пост.
UPD: Начиная с версии 0.9 component.json переименовали bower.json.
Материалы, которые вдохновляли на написание данной статьи:
