Полный набор пакетов для разработки с помощью NodeJS

    Начал изучать NodeJS. Нигде не нашел актуальный стек мейнстримных библиотек (технологий) применяемых в node. Поэтому решил сам составить список.

    Внимание: не все из предложенных пакетов я успел испытать. Может быть опытный хабрачитатель сможет предложить варианты по лучше. Подбирал пакеты по рекомендациям в блогах. Смотрел на описания, на репозиторий в Github (stars, forks).

    Инсталлятор пакетов


    npm — менеджер пакетов для node. Устанавливается вместе с node (в последних версиях так точно).
    Аналог в Ruby: Rubygems+Bundler. Аналог в PHP: Composer.

    Поиск пакетов


    Официальный регистр. Не официальные: npmsearch, packagefinder, nipster

    Веб стек технологий


    Веб-сервер


    connect это расширяемый HTTP сервер фреймворк для Node, с поддержкой высокопроизводительных плагинов так же известных как middleware.
    Список встроенных и трете сторонних плагинов.
    Аналог в Ruby: Rack.

    Веб-фреймворк


    express минималистичный гибкий node фреймворк для веб приложений, предоставляющий широкий набор фич для построения одно-, много- страничных и гибридных веб приложений.
    Подборка материалов для изучения. Русская документация.
    Аналог в Ruby: Sinatra. Аналог в PHP: Silex.

    Есть еще geddy. Вроде бы это аналог Rails. Но что это за зверь не знаю.

    База


    mongoose. Элегантное объектное моделирование для mongodb для node.
    Документация и плагины
    В других ЯП обычно в этом месте встречается термин ORM (Object-relational mapping), но mongoose это ODM (Object-document mapping). Конечно такое бывает не только в node, например в Ruby есть mongoid.

    Темплейты


    Jade высокопроизводительный движок темплейтов для node, сильное влияние на который оказал Haml.
    Документация, оф. документация
    Аналог в Ruby: Slim (akzhan), Haml.

    Замена CSS


    stylus. Выразительный, динамичный, надежный CSS
    less. LESS расширяет CSS переменными, миксинами, операциями и функциями
    Аналоги в Ruby: Sass, less.

    Аутентификация


    everyauth. Аутентификация и авторизация (по паролю, через facebook и т.п.) для ваших Connect и Express приложений.
    Связка для mongoose и everyauth — mongoose-auth.
    Аналоги в Ruby: OmniAuth.

    Sirian советует passportjs. Passport это middleware для node. Очень гибкое и модулярное решение. Passport без проблем может быть подключен к любому Express приложению.

    Хранение сессий


    connect-mongo. MongoDB в качестве хранилища сессий для Connect приложений

    Email


    Nodemailer простой в использовании модуль для отправки электронной почты с помощью node (с использованием SMTP или Sendmail или Amazon SES) и Unicode поддерживается.

    Хеширование паролей


    bcrypt. Библиотека для хеширования паролей.

    Валидация


    node-validator представляет собой библиотеку для проверки, фильтрация и санитизации строк.
    Связка для node-validator и Express — express-validator

    i18n


    i18n-node легковесный простой модуль для интернационализации с динамическим json хранилищем. (Спасибо maxatwork)

    Логирование


    winston. Мульти-транспортная асинхронная библиотека для логирования

    log.io позволяет просматривать потоки сообщений логов в едином пользовательский интерфейс.

    Выполнение тасков


    grunt утилита для командной строки, для исполнения тасков. Наподобие make, rake. Изначально заточена под фронтенд разработку (таски для минификаци, запуск тестов в браузере и т.п.).
    Список плагинов.

    Реалтайм (сокеты, pub-sub)


    Сокеты


    socket.io стремится сделать realtime приложения возможными в любом браузере и мобильном устройстве, стирая различия между разными транспортными механизмами.
    АХТУНГ: все не так гладко, есть баги висящие больше года. Некоторые советуют использовать SockJs

    Redis


    node_redis. Это полный клиент для Redis для node. Он поддерживает все Redis команды, в том числе многие недавно добавленные команды, как EVAL из экспериментальных бранчей Redis.

    Тестирование


    Фреймворк для тестирования


    mocha это многофункциональный тестовый JavaScript фреймворк, работающий и в node и в браузере, что делает асинхронное тестирование простым и веселым. Mocha тесты выполняются последовательно, обеспечивая гибкую и точную отчетность, обрабатывает не перехваченные исключения.

    BDD style


    meettya порекомендовал chai. Это BDD / TDD assertion библиотека для node и браузера, которая может быть использована с любым тестовым фреймворком.

    should.js — выразительная, легко читаемая, не зависищая от тестового фреймворка assertion библиотека для node.

    HTTP моки


    nock — библиотека HTTP моков и ожиданий(expectations) для node

    Моки


    sinonjs. Автономные тест «шпионы», заглушки и моки для JavaScript.

    Покрытие


    blanket Плавное покрытия кода для JavaScript
    Аналог Ruby: RCov

    Симулирование браузера


    zombie легкий фреймворк для тестирования клиентского JavaScript кода в симулированной среде. Браузер не нужен.
    Аналог Ruby: Capybara

    Разработка


    Дебаг


    node-inspector интерфейс отладчика для node использующий WebKit Web Inspector. Статья на Хабре

    Горячая перезагрузка кода


    nodemon будет следить за изменениями файлов в каталоге, в котором nodemon был запущен, и если они изменятся, он будет автоматически рестартовать node приложение.
    Альтернатива: supervisor

    Дебаг + Горячая перезагрузка кода


    nodev помогает с запуском и отладкой node приложений при разработке. nodev запускает node-inspector вместе с вашим приложением, и будет все перезагружать при изменении файлов.
    nodev — форк nodemon.

    Инспектор переменных


    eyes — настраиваемый инспектор значение для node
    Аналог в Ruby: Awesome Print.

    Утилиты


    Управление потоком (Control-Flow)



    step. Простая библиотека для управления потоком для node. Делает параллельное и последовательное исполнение, а также обработку ошибок безболезненным.

    async — модуль предоставляющий простые и мощные функции для работы с асинхронным JavaScript.

    Сравнение популярных библиотек для управления потоками и еще список новых библиотек

    Tools


    meettya напомнил про lodash. Он как underscore, но лучше.

    underscore это невероятно удобная JavaScript библиотека, этакий швейцарский нож для js-разработчика, набор функций-утилит, которые так привычны любителям Prototype.js (или Ruby). Однако, в отличие, от Prototype.js, underscore не модифицирует прототипы встроенных объектов JavaScript.

    Монитор процесса


    forever — простой инструмент для обеспечения того, чтобы данный скрипт работает непрерывно (т.е. вечно).

    HTTP клиент


    request самый простой способ делать HTTP-запросы.

    Работа с изображениями


    gm — GraphicsMagick для node

    Построение консольных приложений


    Цвета в консоли


    colors — цвета и стили в консоли для вашего node приложения.

    Для написания консольных приложений


    commander.js. Полноценное решение для командной строки для node приложений

    node-optimist — библиотека для парсинга опций

    Coffescript


    coffee-script. Удобно будет разрабатывать вместе с nodemon

    Немного магии вместо послесловия


    Не могу не упомянуть про meteor
    Метеор — платформа с открытым исходным кодом для построения высококачественных веб приложений в мгновения ока, независимо от того опытный вы разработчик или только начинаете.
    Обязательно посмотрите скринкасты: 1, 2. Или почитайте, что пишут про метеор на Хабре.
    Ближайшие конкуренты: derby, socketstream

    UPD Нашел на Хабре другой пост с набором пакетов
    Метки:
    Поделиться публикацией
    Комментарии 45
    • +3
      Для авторизации использую passportjs.org/
      • 0
        а как оно с кластером работает? а то я так и не смог everyauth подружить, написал разрабам, бага так и весит по сей день(
        • 0
          можно хранить сессию авторизации в memcache, например
          • –1
            ну я хотел бы сессию хранить в редисе. но, почему-то не работает. вот подробнее:
            stackoverflow.com/questions/13711346/node-js-everyauth-cluster-error
            и как паспорт для третьего экспресса работает, все норм?
            • 0
              passport имеет собственный middleware passport.session, который работает поверх обычной сессии. Отлично работает с express 3
              • 0
                Спасибо, перешел на паспорт и заработала многопоточность!
      • –2
        Поверх node-optimist работает nconf — на случай заморочки опций, окружения и конфигов
        • 0
          Вместо should стоит использовать chai, он и в браузере работает.
          А underscore заменить на lodash — то же самое, только быстрее + есть плюшки.
          • –1
            Хорошее замечание. Не обратил внимание, что should не поддерживает браузер
          • +1
            • 0
              Я хотел список «мейнстримных» пакетов.
              • 0
                понял.

                для поиска и сортировки по звёздочкам есть ещё удобный eirikb.github.com/nipster/, если вдруг.
                • +1
                  Вот здесь всегда актуальный мэйнстрим http://nodetoolbox.com/
                  • 0
                    Да, неплохо. Категоризация местами хромает, но лучше чем ничего.
                  • НЛО прилетело и опубликовало эту надпись здесь
                • 0
                  Ещё node-postgres для тех, кому всё-таки нужны классические рсубд с sql, транзакциями, операторами и прочими такими штуками.
                  • +1
                    Вместо jade использую blade. Он как jade, только лучше:
                    • работает на клиенте
                    • поддержка meteor
                    • удобное блочное наследование
                    • 0
                      Jade работает и на клиенте.

                      Кстати, его аналог в Ruby не Haml, а Slim.
                      • +1
                        Вся прелесть blade на клиенте, что можно использовать уже скомпилированные шаблоны с сервера. А это решает проблему этого комментария.
                        • 0
                          Jade тоже может использовать скомпилированные шаблоны с сервера. И данную проблему это никак не решает — не важно где будет тормозить — на сервере или клиента — тот же with в скомпилированных шаблонах.
                          • 0
                            Кстати, насколько я помню, у Jade есть опция работать без with (self).
                          • НЛО прилетело и опубликовало эту надпись здесь
                        • 0
                          Хм, да и блочное наследование есть же в jade докучи к факту, что jade таки работет на клиенте (я вполне успешно юзаю).
                          Причем интуитивно оно мне нравится больше и выглядит богаче чем то, что описано в доке к blade (просто параметризированные блоки).

                          Из раздела Why use Blade instead of Jade? в документации, если честно, не вдохновил ни один пункт.

                          Несмотря на это, я верю, что там больше позитивных сторон, чем я смог увидеть при беглом осмотре. Просто требуется какое-то более фундаментальное сравнение с jade, а не фразы в документации вида
                          Jade is an ornamental stone. Blade is a badass vampire hunter
                        • +2
                          В качестве фреймворка довольно интересная штука http://autodafe.ws/
                          • 0
                            Для написания консольных приложений можно использовать coa.
                            • +1
                              optimist, перечисленный в статье, цепляет своей простотой.
                              • 0
                                Тут на вкус и цвет, как говорится. Мне он кажется слишком простым.
                            • 0
                              • +1
                                • 0
                                  Главное, чтобы его производительности хватало для вас. Все-таки за его стиль можно многое простить :)
                                • НЛО прилетело и опубликовало эту надпись здесь
                                  • 0
                                    Я так понял, что это разновидность control flow (futures). Показаыне примеры кода меня как-то не впечатлили. Может я чтол-то не понимаю…
                                    • НЛО прилетело и опубликовало эту надпись здесь
                                      • 0
                                        Спокойно, сейчас все станет ясно.
                                        1. На сайте node-fibers жирным шрифтом выделено:
                                        it is not recommended to use Fiber without an abstraction in between your code and fibers

                                        2. Смотрим в качестве примера такой абстракции node-sync. Здесь уже с сахаром.
                                        (Пардон, что второй раз в посте эта ссылка)
                                        • 0
                                          т. е. вместо
                                          var res;
                                          fs.readFile(fileName, function(err, data){
                                              res = data;
                                          });

                                          получаем
                                          var res = fs.readFile.sync(fileName);
                                          

                                          А если нужно что-то делать параллельно — используем вместо sync метод future и достаем результат через result getter
                                  • –2
                                    Забыли про:
                                    * SugarJS, лично мне он кажется более красивым, чем Underscore с его подчеркиванием, не вижу большого зла в расширении прототипов:)
                                    * Moment.JS для работы с датами.
                                    * Альтернатива кофескрипту — LiveScript для любителей функционального программирования с мощной стандартной библиотекой.
                                    • 0
                                      Противников прототипов расширения ощущаю на хабре я.
                                    • 0
                                      Еще в копилку — i18n-node (локализация).
                                    • 0
                                      compoundjs.com (в юношестве известный как RailwayJS) — MVC-фреймворк на базе expressjs
                                      • 0
                                        По поводу control flow, очень удобное решение — node-sync (на базе node-fibers), да и знакомые используют.
                                        • 0
                                          PhantomJS is a headless WebKit with JavaScript API.
                                          NowJS — удаленный вызов процедур.
                                          nodeenv — Node.js virtual environment.
                                          • 0
                                            Хотя да, PhantomJS немного не в тему, но есть мост — phantomjs-node

                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.