
1. Express

Express — это быстрый и минималистичный веб-фреймворк для Node.js, который даёт разработчику достаточно большой уровень свободы в деле создания веб-серверов.
2. Socket.io

Socket.io позволяет организовывать в приложениях двусторонние системы обмена данными, работающие в реальном времени и основанные на событиях.
3. Body-parser

Body-parser — это пакет, который позволяет разбирать тела запросов, хранящиеся в
req.body
, выступая в роли ПО промежуточного слоя для серверов, основанных на Express. Он обрабатывает запросы до их попадания в соответствующие обработчики.4. Cors

Cors — это пакет, содержащий реализацию ПО промежуточного слоя для Connect/Express, которое позволяет настраивать и использовать CORS.
5. Passport

Passport — это система аутентификации для Node.js, совместимая с Express.
Единственная задача, на решение которой нацелен пакет passport, заключается в аутентификации запросов. Обработка запросов выполняется с использованием настраиваемого набора плагинов, известных как «стратегии».
6. Multer

Multer — это ПО промежуточного слоя для Express, предназначенное для обработки данных типа
multipart/form-data
. Такие данные, в основном, поступают на сервер при выгрузке файлов. Обратите внимание на то, что эта библиотека не обрабатывает данные, тип которых отличается от multipart/form-data
.7. Axios

Axios — это HTTP-клиент, основанный на промисах и предназначенный для браузеров и для платформы Node.js.
8. Morgan

Morgan — это система логирования HTTP-запросов.
9. Http-errors

Http-errors — это библиотека, позволяющая генерировать HTTP-ошибки. Её можно использовать с различными веб-фреймворками, например — с Express, Koa, Connect.
10. Dotenv

Dotenv — это модуль, у которого нет зависимостей. Он предназначен для загрузки переменных окружения из .env-файла в process.env. Использование этого механизма позволяет хранить настройки приложений отдельно от их кода.
11. Faker

Faker — это библиотека, позволяющая генерировать большие объёмы фиктивных данных. Она подходит для браузеров и для Node.js.
12. Nodemailer

Nodemailer позволяет отправлять из среды Node.js электронные письма. Пользоваться этой библиотекой очень просто.
13. Sequelize

Sequelize — это ORM для СУБД Postgres, MySQL, MariaDB, SQLite и Microsoft SQL Server. Библиотека основана на промисах. При её использовании в распоряжении разработчика оказывается множество надёжных механизмов, упрощающих работу с базами данных.
14. Mongoose

Mongoose — это библиотека, упрощающая работу с СУБД MongoDB. Она поддерживает и промисы, и коллбэки.
15. Jest

Jest — это популярный и хорошо поддерживаемый фреймворк для тестирования JavaScript-проектов, созданный компанией Facebook.
16. Moment

Moment — это компактная JavaScript-библиотека, предназначенная для работы со значениями, представляющими даты. Она позволяет создавать, разбирать, проверять, форматировать подобные значения.
17. Lodash

Lodash — это библиотека, дающая в распоряжение разработчика множество вспомогательных методов, упрощающих работу с массивами, числами, объектами, строками. Эта библиотека имеет модульную структуру. Lodash можно, в частности, использовать для решения следующих задач:
- Обход массивов, объектов, строк.
- Манипулирование значениями различных типов и выяснение типов значений.
- Работа с функциями (например — каррирование и мемоизация).
18. Chalk

Chalk — это пакет, который позволяет стилизовать тексты, выводимые в консоль. Он обладает удобным API.
19. Validator

Validator — это библиотека, предназначенная для проверки и очистки строковых данных.
20. Cheerio

Cheerio позволяет разбирать материалы, представляющие собой HTML- и XML-разметку. Эта библиотека даёт разработчику API для работы с тем, что получилось в результате разбора таких материалов.
21. JSDoc

JSDoc — это система, которая предназначенная для автоматизации создания документации к JavaScript-коду.
22. Helmet

Helmet позволяет программистам защищать Express-приложения, помогая в деле настройки различных HTTP-заголовков.
23. Crypto-js

Crypto-js — это JavaScript-библиотека, содержащая реализации различных криптографических механизмов.
Какие библиотеки для Node.js вы считаете самыми полезными?

some_x
На замену moment автор написал luxon. moment имеет свойство мутировать объекта там где этого совсем не ждёшь
dimoff66
Если потратить 15 минут на чтение документации, поведение сразу становится ожидаемым и мутирует он именно там где это описано https://momentjs.com/docs/
mayorovp
Но никакое чтение документации не упростит использование библиотеки там, где требуются неизменяемые объекты. А это Knockout, React, Mobx, Svelte, возможно даже Angular, даже $mol...
dimoff66
Упростит, если вы прочитаете про метод clone и будете его использовать там, где необходима иммутабельность при вызове изменяющих объект методов
momentjscom.readthedocs.io/en/latest/moment/01-parsing/12-moment-clone
mayorovp
В том-то и дело, что при работе с moment в перечисленных мною фреймворках и библиотеках писать clone приходится каждый раз, и если забыть это сделать — будет трудноуловимая ошибка. А в luxon получается на один clone меньше.
dimoff66
Не благодарите
mayorovp
И в итоге получаем нечто, что работает не так как написано в документации, зато медленно? Не проще ли luxon взять?
dimoff66
Ну естественно копирование объектов будет работать медленнее, чем мутабельные объекты. Это же просто априори.
Ну мне например не проще взять luxon, поскольку к методам moment я привык, мне проще было написать несколько строк кода. Но я почитаю про luxon, спасибо.
mayorovp
Тут проблема не в самом копировании, а в том как вы переопределяете у объекта все методы. Хоть бы прототип подменяли! (хотя эта операция тоже не самая быстрая)
dimoff66
То есть вы считаете, что подмена нескольких методов дороже по производительности чем копирование всего объекта? Интересный и очень оригинальный взгляд на вещи. Я вас удивлю: код где мы создаем объект и вызываем startOf будет работать примерно в два раза дольше (что по правде говоря не критично, на 100 000 вызовов это полсекунды на каком нибудь среднем компьютере). Из них 30% увеличения будет на совести копирования методов и 70% на совести иммутабельности.
Прототипом у создаваемого через moment() объекта является класс, используемый moment-ом, подмена в нем методов крайне не рекомендуется методологически. По хорошему можно унаследовать класс и делать на нем, но если проигрыш во времени копеечный (2 десятых секунды на 100 000 созданий и вызовов метода) — можно и так оставить.
mayorovp
"Весь объект" — это всего-то 11 приватных свойств. А подменить вам надо около 30 методов. Плюс вы зачем-то сохраняете оригинальные методы в объекте, а не в замыкании, отсюда ещё двухкратное увеличение их числа. 60 значительно больше 11, так что да — затраты на подмену методов, по моей оценке, превосходят затраты на клонирование объекта.
Кстати, в luxon используется всего 6 приватных свойств.
dimoff66
Тем более если копирование написано неоптимально, значит его можно переписать так, чтобы потеря производительности была еще незаметней. Про подмену 30 методов я не очень понял. Зачем вам мутабельность при каждом методе? Понимаю те 4 что я упомянул плюс clone, остальные то зачем подменять? Окей, спасибо за беседу.
mayorovp
Ну а что ещё делать с setXXX-методами? Оставлять как есть что ли? Запрещать использовать?
dimoff66
Возможен же такой код? Если при вызове каждого метода объект будет копироваться, это будет странно. Я бы подменил только сам set, но это все дело вкуса. Смысл был показать, что приспособить moment под иммутабельность недолго и не критичные потери производительности. 100% полагаю для программирования ничто.
bouncycastle
Тогда я бы рекомендовал date-fns
some_x
Лично я считаю что экспортирование отдельных функций вместо полноценных классов это не удачный дизайн для большинства библиотек и соответственно date-fns не рекомендую.
anonymous
В погоне за уменьшением размеров бандла библиотека с набором отдельных функций выглядит привлекательней монолитного класса. Особенно, когда в проекте просто необходимо форматнуть пару дат, пришедших с бэкенда. Именно размер заставил меня отвернуться от moment в сторону date-fns
copperfox777
date-fns — это функциональный подход. Классы не наше всё.