Менеджеры пакетов в JavaScript

Менеджеры пакетов в JavaScript

Михаил Баранов

Исходные данные

Чего хочется

Copy & paste

Git submodule

Задачи пакетного менеджера

Пакет (Package)

За границей JavaScript

Почему npm, bower и volo

npm

npmjs.org

Установка

Обновление

            $ sudo npm update npm
        

Опять консоль?

            var pmList == [ 'npm', 'volo', 'bower', 'component' ]
            pmList.filter(hasGui) == [ ]
             
            function hasGui(elem) {
                return "gui" in elem;
            }
        

96 команд

96 команд

Реестр

Настройка npm

node_modules

node_modules

Can I configure npm to use a different folder?

No. This will never happen. This question comes up sometimes, because it seems silly from the outside that npm couldn't just be configured to put stuff somewhere else, and then npm could load them from there. It's an arbitrary spelling choice, right? What's the big deal?

npmjs.org/doc/faq.html

Актуальность пакетов

Проект как пакет

Все доступные параметры

Самое необходимое

            "name": "Death Star",
            "version": "1.0.0",
            "description": "That's no moon...",
            "dependencies": {
                "Reactor core": "~0.1.0"
            },
            "devDependencies": {
                "titanium": "*"
            }
        

Версии зависимостей

            "dependencies" : {
                "foo" : "1.0.0 - 2.9999.9999",
                "bar" : ">=1.0.2 <2.1.2",
                "baz" : ">1.0.2 <=2.3.4",
                "qux" : "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0",
                "asd" : "http://asdf.com/asdf.tar.gz",
                "til" : "~1.2",
                "elf" : "~1.2.3",
                "thr" : "3.3.x"
            }
        

Если нет в реестре

#commit-ish: тег, хеш или имя ветки. По умолчанию master.

Публикация пакета

            $ npm adduser
            $ npm init
            ...
            $ npm publish
            $ npm unpublish <project>[@<version>]
            $ npm unpublish --force <project>
        

volo

Установка

            $ npm install -g volo
        

Ну не на руби же его писать

Команды

Установка пакетов

Метаданные

        ... // package.json
        {
            "volo": {
                "baseUrl": "",
                "url": "",
                "dependencies": {},
                "ignore": []
            }
        }
        

Источники пакетов

Semver

Semantic Versioning

Bower

Установка

            $ npm install -g bower
        

Команды

Установка пакетов

Установка пакетов

Настройка

.bowerrc

bower.json

            "name": "X-wing fighter",
            "version": "1.23.4",
            "ignore": [],
            "dependencies": {
                "<name>": "<version>",
                "<name>": "<folder>",
                "<name>": "<package>"
            },
            "devDependencies": {}
        

Источник пакета

Публикация пакета

Небольшой тест

Тест

Итоги

  Backbone.js +
jQuery
устаревший Underscore.js удаление Underscore.js
npm
volo  
bower

jQuery в npm

Backbone.js и bower

github.com/components

Спасибо!

Михаил Баранов

repka.com