Пользователь
0,0
рейтинг
8 января 2013 в 00:36

Разработка → Полный набор пакетов для разработки с помощью 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 Нашел на Хабре другой пост с набором пакетов
kotiara @kotiara
карма
63,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (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
          • 0
            Я о том же хотел сказать, что futures это круто, но как-то синтаксического сахара не хватает…
  • –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

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