Пристегнитесь и будьте готовы перейти к техническим вопросам. Сегодня мы расскажем вам все о модулях npm, которые мы используем в Круассане. Почему? Потому что делиться заботой. Итак, без лишних слов, вот они в алфавитном порядке:

повестка дня

Это то, что позволяет нам планировать то, что большинство людей называют «cron» -работами. Например, у нас есть работа, которая выполняется каждые несколько минут, чтобы убедиться, что Круассантерс не задерживается после закрытия места проведения мероприятия. Меньше всего мы хотим, чтобы на следующий день пришел менеджер сообщества и полностью очистил батончики с мюсли.

повестка дня

Эта симпатичная маленькая утилита легко подключается к нашему приложению, чтобы дать нам приятный интерфейс для управления вышеупомянутыми заданиями. Это похоже на экран заказов в McDonalds, позволяющий сотрудникам узнать, какие заказы выполнены, а какие еще нужно выполнить.

асинхронный

Изначально мы использовали async для одновременного выполнения нескольких асинхронных задач, но с тех пор мы перешли к использованию «q», которое вы найдете дальше по списку :) Мы все еще используем его здесь и там, в основном «водопад» и « each »для чего-то вроде выполнения нескольких операций с базой данных подряд, которые полагаются друг на друга.

aws-sdk

Это позволяет нам загружать материалы на AWS S3, то есть эти красивые фотографии, демонстрирующие наши потрясающие пространства!

bcryptjs

Беспокоитесь о безопасности вашего пароля? Не надо! Этот алгоритм является отраслевым стандартом. Даже если нас взломают, ваш пароль все равно будет представлять собой набор букв и символов. Не делайте свой пароль простым словарным словом, потому что, если кто-то получит эти данные, он может довольно быстро попробовать все слова в словаре.

body-parser

Здесь мы используем веб-сервер ExpressJS, поэтому нам нужен способ синтаксического анализа всех этих ответов JSON. Эта верная штуковина делает именно это. Это одна из тех вещей, которые вам нужны при использовании Express.

мозговое дерево

Ага, мы используем Braintree, платежную компанию, которая была приобретена PayPal. Когда мы рассмотрели простой способ сбора платежей PayPal, это имело смысл, поскольку он имеет механизм, очень похожий на Stripe, нашу систему обработки кредитных карт. Основная возможность заключается в том, чтобы зарегистрировать токен клиента для использования с регулярными и избыточными платежами. Подробнее об этом, когда мы поговорим о Stripe ниже.

чай

Мы используем это в наших интеграционных тестах. Это здорово для того, чтобы убедиться, что все работает так, как вы от них ожидаете, используя функцию «ожидать» :)

сжатие

Это еще одна из тех экспресс-вещей, которые вам просто необходимы. Он сжимает ответы сервера, поэтому данные быстрее передаются по Интернету. Вот и все. Хорошая вещь.

экспресс

Это большой кахуна. Это основной модуль для веб-сервера ExpressJS NodeJS, который избавляет нас от необходимости писать тонны стандартного кода HTTP-сервера. Он поставляется с некоторыми интересными функциями, такими как возможность указать папку со статическими файлами, которая действует как простой файловый сервер, и, конечно же, возможность легко добавить один из многих плагинов, созданных из его яркого сообщества.

навсегда

Были ли когда-нибудь сбой процесс узла или экспресс-сервер? Этот щенок вернется к вам. Это тоже довольно умно - вы можете указать, как долго процесс должен работать, прежде чем он потерпит неудачу, чтобы произошел перезапуск. Это предотвращает повторный запуск автоматически сбойного процесса снова и снова.

fs-extra

Когда модуля «fs» недостаточно, «fs-extra» дает вам все это и даже больше. На самом деле мы просто используем его для создания вложенной папки, если родительская папка не существует. По какой-то причине это слишком много, чтобы просить ребят из «фс».

gm

Этот модуль - волшебство. GraphicsMagick - это оболочка для долгоживущей библиотеки ImageMagick C, которая веками использовалась многими манипуляторами изображений. Мы используем это для изменения размера и обрезки загружаемых изображений. Вы знаете все те прекрасные изображения площадок, которые мы размещаем на AWS? Сначала мы использовали это на них.

глоток

Gulp всегда работает в фоновом режиме, пока мы пишем код. Он автоматически сжимает наши файлы javascript и css. Мы также используем его для создания наших тестовых исполнителей. У него масса пакетов (о которых вы скоро узнаете)! Некоторые говорят, что это похоже на «ворчание», но с потоками.

gulp-angular-templatecache

Мы упоминали, что используем Angular? Мы используем Angular. Этот плагин gulp позволяет нам объединить все наши html-шаблоны в один файл для более быстрой загрузки на веб-сайт. Затем Angular может использовать этот шаблон для загрузки страниц.

глоток-конкат

Помните ту потрясающую вещь, о которой мы говорили ранее? Это позаботится об этом.

gulp-csso

Помните, как мы любим крушить вещи? Это позволяет нам разбивать вещи на файлы еще меньшего размера, сначала уменьшая файлы CSS, которые собираются удалить.

глоток-стамбул

Gulp также отличный бегун тестов, бегун. Во время выполнения тестов «istanbul» будет выводить отчет, показывающий покрытие нашего модульного и интеграционного тестирования, с процентным соотношением, показывающим, какой объем кода был покрыт тестом. Волшебный.

gulp-livereload

Это обязательное условие для интерфейсных разработчиков, оно подключается к вашему веб-браузеру и обновляет его каждый раз, когда вы вносите изменения в html-файл. Хорошая работа, глоток.

глоток-мокко

Больше тестовых материалов. Это просто оболочка для мокко, которую мы используем для интеграционных тестов, например, чтобы убедиться, что конечная точка API работает должным образом.

Глоток-сантехник

Из-за всей нашей потоковой передачи и конвейерной передачи с помощью gulp нам нужна эта небольшая библиотека. Если что-то вроде gulp-csso выйдет из строя, это обеспечит бесперебойную работу.

gulp-sass

Вы думали, мы используем CSS? Подумай еще раз. Все, что вы видите, когда-то было молодым, многообещающим файлом scss (он же Sass). Gulp наблюдает и компилирует наш основной вывод css каждый раз, когда мы вносим изменения ... очень быстро!

gulp-uglify

И последнее, но не менее важное: этот плагин gulp выполняет хорошее усовершенствование внешнего JavaScript-кода, поэтому мы можем отправить его вам очень быстро и очень безопасно.

jwt-simple

Вернемся к реальности, подальше от глотков, теперь у нас есть пакет, который упрощает авторизацию. Когда вы входите в Croissant, мы берем вашу информацию, объединяем ее воедино, кодируем с помощью jwt-simple и сообщаем вашему браузеру, что получилось. Затем ваш браузер использует токен, который мы вам предоставили, каждый раз, когда он делает что-то, что требует, чтобы вы вошли в систему.

lodash

Lodash олицетворяет победу в жизни. Все необходимое для работы с коллекциями объектов и массивов в JavaScript - все в одной простой библиотеке. Мы большие поклонники pick, omit и contains - полезные для ограничения ответов сервера API для более быстрой загрузки.

пантомимы

Здесь, в Круассанте, у нас работает плотный корабль, а это значит, что мы отслеживаем типы файлов, которые мы загружаем на AWS S3. Один из способов сделать это - взять расширение файла и передать его в эту библиотеку, в результате чего получится что-то вроде «image / jpeg» для файла jpg.

мокко

При этом все, что нам нужно сделать, это набрать «мокко» и запустить множество тестов, которые мы составили с помощью функций «описать» и «оно» для организации тестов. Нет ничего проще для запуска тестов JavaScript.

момент

Каждый, кто когда-либо программировал что-либо, сталкивался с датой и временем. JavaScript сам по себе очень прост, но момент все делает лучше. С моментом вы просто передаете необработанный объект даты JavaScript, а взамен получаете приятный маленький шарик функций даты и времени, с которыми вы можете поиграть, например, форматирование, добавление времени и изменение.

момент-часовой пояс

Однако не забывайте о часовых поясах. Если вы не будете осторожны, кто-то на другом конце света подумает, что ваш магазин открывается в 3 часа ночи, а не в полдень. Этот пакет полезен для преобразования времени нашего сервера UTC в часовой пояс места проведения, чтобы вы знали, когда появиться, независимо от того, где вы находитесь.

мангуст

Мы упоминали, что используем MongoDB? Мы используем MongoDB. Mongoose держит нашу команду в курсе, позволяя нам всегда сразу видеть структуру наших данных. Без него вы могли бы получить в базе данных всевозможные объекты, вызывая неизвестно какой хаос на задней и внешней стороне.

морган

Как и body-parser, это еще один из тех пакетов, без которых вы просто не можете обойтись при запуске сервера Express. Он не только выводит всевозможную информацию, такую ​​как время ответа и имя пути всякий раз, когда есть HTTP-запрос, но также позволяет вам настраивать (с помощью функции!) То, что вы хотите видеть в выводе.

newrelic

New Relic - отличная компания, которая дает вам информацию о вашем приложении. Вы просто добавляете пакет в первую строку кода на своем сервере, а затем переходите на их веб-сайт, чтобы увидеть, как происходит волшебство. Мы используем его, чтобы получать уведомления, если на нашем производственном сервере происходит множество ошибок.

nodemailer

Если вам когда-нибудь понадобится отправить электронное письмо, не отправляйте его самостоятельно - используйте сервис транзакционной электронной почты, например SendGrid. В нем есть несколько замечательных функций, таких как возможность создать красивый шаблон, который объединяет все наши электронные письма. Nodemailer - это пакет, который позволяет нам отправлять простые сообщения в SendGrid.

prerender-node

Помните ту штуку Angular, которую мы используем? Это отстой для SEO, потому что большинство поисковых систем не понимают этого. На помощь приходит предварительная сдача. С его помощью поисковые роботы могут легко увидеть версию вашего веб-сайта, отличную от Angular, потому что предварительный отрисовщик оценил, как она выглядит. Отключите JavaScript в своем браузере в следующий раз, когда будете просматривать круассан, и вы поймете, что мы имеем в виду.

транспортир

Любой, кто когда-либо работал с webdriver для автоматизации задач и тестов браузера, быстро увидит ценность Angular-оболочки. Эта оболочка ожидает загрузки Angular на странице и ожидает выполнения всех обещаний, прежде чем перейти к следующей строке тестов. Это удобно для нашего приложения, в котором много асинхронных событий.

q

В то время как async хорош для водопадов и операций с картами, «q» отлично подходит для обещаний. Под этим мы подразумеваем взять обычную функцию обратного вызова и заключить ее в синтаксис обещания «q». Это позволяет нам создавать цепочки обещаний, включающие асинхронные функции, которые обычно используют обратные вызовы, или ад обратного вызова.

запрос

Время от времени нам нужно вручную выполнять HTTP-запрос к внешнему серверу. Мы всегда использовали этот пакет для выполнения такого рода задач с момента появления NodeJS. Однако в основном sdk для внешних сервисов, которые мы используем, делают это за нас, используя «запрос» под капотом.

слизняк

Это библиотека, которая превращает «Hello There» в «Hello-There», идеально подходящую для преобразования динамических заголовков в удобные для URL-адресов ссылки. Мы используем это, чтобы взять названия наших заведений и сделать эту уникальную ссылку, которой вы можете поделиться со своими друзьями, чтобы они знали, где вас найти.

полоса

Время получать деньги. Stripe - это наш платежный процессор для кредитных карт. Они достаточно хороши, чтобы хранить информацию о кредитных картах клиентов в соответствии с требованиями PCI, поэтому нам это не нужно. Мы используем их SDK, чтобы помещать карты в архив и взимать плату.

супертест, как и обещал

Это ядро ​​наших интеграционных тестов. Используя обещания, мы можем легко ожидать определенного кода состояния ответа, а также использовать данные ответа на следующем этапе теста. Мы используем это с chai.

Ну вот и все, ребята. Наш список вкусностей. Мы всегда открыты для вопросов, комментариев и предложений. Пожалуйста, будьте нежны :)

Дэйв
Соучредитель и генеральный директор Круассан