[Перевод] NodeJS: 12 пакетов для продуктивности разработчика

20yyo4l1pdliogvvjijidwjpz-4.jpeg

Менеджер процессов для продакшна с балансировщиком нагрузки. Обёртки над отладкой и хуками Git, защита express-приложений через HTTP-заголовки, утилита в более чем 180 функциями для работы с датами и другие инструменты, которые сэкономят ваше время. Подборка особенно полезна начинающим разработчикам NodeJS, но может порадовать опытных скептиков.
Всякий раз, когда вам нужно решить проблему с кодом, есть вероятность, что пакет для решения вашей проблемы уже существует. Вот список пакетов, о которых, я думаю, должен знать каждый разработчик. Рассматривайте эти npm-пакеты как то, что сэкономит ваше время.

1. Husky


Husky упрощает реализацию хуков в Git. Она позволяет требовать, чтобы все автоматически линтовали и тестировали код перед коммитом или отправкой в репозиторий.

josuecbarzozbksbqdji291_888.png
Исходники husky

Установка

yarn add husky


Применение


Пример хуков с husky:

// package.json
{
  "husky": {
    "hooks": {
      "pre-commit": "npm lint",
      "pre-push": "npm test"
    }
  }
}


pre-commit запускается перед коммитом.
pre-push перед отправкой в репозиторий.

2. Dotenv


Dotenv — модуль без зависимостей. Он загружает переменные среды из файла .env в process.env. Хранение конфигурации в среде отдельно от кода основано на методологии приложения двенадцати факторов. Исходники dotenv.

Установка

yarn add dotenv


Применение


Как можно раньше в вашем приложении пропишите require и установите значения dotenv:

require('dotenv').config()


Создайте .env файл в корневом каталоге вашего проекта. Добавьте переменные среды в новые строки в виде NAME=VALUE. Например:

DB_HOST=localhost
DB_USER=root
DB_PASS=s1mpl3


Теперь process.env содержит ключи и значения из файла .env:

const db = require('db')
db.connect({ host: process.env.DB_HOST, username: process.env.DB_USER, password: process.env.DB_PASS})



3. date-fns


Date-fns похож на lodash, но создан для работы с датами. Предоставляет полный, но простой и последовательный набор инструментов манипуляций с датами JavaScript в браузере и Node.JS.

ue3cfxmzmn0apmifadls0y0oj3o.png
Исходники date-fns

Установка

yarn add date-fns


Применение


Пример с date-fns:

import { compareAsc, format } from 'date-fns'
format(new Date(2014, 1, 11), 'yyyy-MM-dd')  
//=> '2014-02-11'
const dates = [  
  new Date(1995, 6, 2),  
  new Date(1987, 1, 11),  
  new Date(1989, 6, 10),  
]  
dates.sort(compareAsc)  
//=> [  
//   Wed Feb 11 1987 00:00:00,  
//   Mon Jul 10 1989 00:00:00,  
//   Sun Jul 02 1995 00:00:00  
// ]


Документация с примерами и вариантами использования.

4. Bunyan


Bunyan — это простая в использовании и производительная библиотека логирования JSON для Node.

b0jbbofpeixlftfq42vyn2wmexi.png
Исходники bunyan

Установка

yarn add bunyan


Обратите внимание: CLI bunyan написан так, чтобы быть совместимым (в пределах разумного) со всеми версиями логов Bunyan. Поэтому вы можете установить его глобально: yarn add global bunyan, чтобы получить этот инструмент в PATH, а затем использовать локальные установки Bunyan для приложений.

Применение


Bunyan — это простая и быстрая библиотека ведения журнала JSON для сервисов Node.js.

// hi.jsconst bunyan = require('bunyan');
const log = bunyan.createLogger({name: "myapp"});
log.info("hi");


Вот что возвращается на консоль, если вы запускаете node hi.js.

uqqi8nh3sc5i-sd_6xwyf2aaqwm.png


5. Ramda


Ramda — это практичная и полезная библиотека в функциональном стиле. Она подчеркивает чистый функциональный стиль. Неизменность и свободные от побочных эффектов функции лежат в основе философии дизайна Ramda. Такой подход может помочь вам писать простой, элегантный код.

e9zkanh1fvo8wssxqlecwamumfk.png
Исходники ramda

Установка

yarn add ramda


Применение

import * as R from 'ramda'
const greet = R.replace('{name}', R.__, 'Hello, {name}!'); 
greet('Alice'); //=> 'Hello, Alice!'


Примеры кода

6. Debug


Debug — это крошечная утилита отладки JavaScript, смоделированная по образцу техники отладки Node.JS.

uo2or8utfnnoyzxfoba8nceve38.png
Исходники Debug

Установка

yarn add debug


Применение


Debug предоставляет функцию. Просто передайте этой функции имя вашего модуля, и она вернёт декорированную версию console.error для передачи отладочных операторов.

const debug = require('debug');
const log = debug('http:server');
const http = require('http');
const name = 'My App name';
log('booting %o', name);
http.createServer((req, res) => {
  log(req.method + ' ' + req.url);
  res.end('debug examplen');
}).listen(3200, () => {
  log('listening');
});
// выполните в терминале
// DEBUG=http:server node app.js


Позволяет показывать и прятать выходные данные отладки для модуля в целом или его частей.

on_mzk35ddq0evudv5nwnwdhlqg.png


7. Flat


Flat принимает объект и делает его плоским. Можно также свернуть объект, разделённый ключами. [Прим. перев. — разделиелем может быть не только точка].

h7fvkh0usmpmsaadapitpgapnww.png
Исходники Flat

Установка

yarn add flat


Применение

const flatten = require('flat')
flatten({  
    key1: {  
        keyA: 'valueI'  
    },  
    key2: {  
        keyB: 'valueII'  
    },  
    key3: { a: { b: { c: 2 } } }  
})
// {  
//   'key1.keyA': 'valueI',  
//   'key2.keyB': 'valueII',  
//   'key3.a.b.c': 2  
// }


8. JSON5


Формат обмена данными JSON5 — это надмножество JSON, целью которого является смягчение некоторых ограничений JSON путём расширения его синтаксиса для включения некоторых возможностей ECMAScript 5.1.

timg4z3-gnts6jizj5lrxbj5yii.png
Исходники JSON5

Установка

yarn add json5  
const JSON5 = require('json5')


Применение


Обратите внимание на расширение файла. JSON5 — это надмножество, расширение JSON.

{
  // комментарии
  unquoted: 'and you can quote me on that',
  singleQuotes: 'I can use "double quotes" here',
  lineBreaks: "Look, Mom! \
No \\n's!",
  hexadecimal: 0xdecaf,
  leadingDecimalPoint: .8675309, andTrailing: 8675309.,
  positiveSign: +1,
  trailingComma: 'in objects', andIn: ['arrays',],
  "backwardsCompatible": "with JSON",
}



9. ESLint


ESLint — это замечательный инструмент, чтобы избегать ошибок и установить стандарты кодирования командам разработчиков. ESLint — инструментом для выявления и представления закономерностей, обнаруженных в коде ECMAScript/JavaScript.

qujhrgn_eb-bbcfpvbxxpad2w2k.png
Исходники ESLint

Установка и применение

yarn add eslint


Затем настройте конфигурационный файл:

./node_modules/.bin/eslint --init


После этого можно запускать ESLint в любом файле или каталоге, например:

./node_modules/.bin/eslint yourfile.js


Документация со множеством примеров по началу работы и настройке.

10. PM2


PM2 — это менеджер процессов для продакшна со встроенным балансировщиком нагрузки. Он позволяет вам сохранять приложения постоянно работоспособными, перезагружать их без простоев и облегчать общие задачи системного администрирования.

gjjnybme6gnedqwbcxmozfaclps.png
Исходники pm2

Установка

yarn add global pm2


Запуск приложения


Вы можете запустить любое приложение (Node.js, Python, Ruby, бинарные файлы в $PATH и так далее) вот так:

pm2 start app.js


Теперь ваше приложение выполняется под контролем демона, непрерывно контролируется и поддерживается. Подробнее об управлении процессами, быстрый старт.

А вот как вы можете вывести список всех запущенных приложений:

pm2 ls


cte8uxmkelimb0ijs8nqrasmd34.png

Ознакомьтесь с официальной документацией, чтобы узнать полный список функций и возможностей.


11. Helmet


Helmet помогает защитить приложения express через HTTP-заголовки. Это не серебряная пуля, но она может помочь.

9lzfgtzbk00afr9w1kqxf3sdaw0.png
Исходники Helmet

Установка

yarn add helmet


Применение


Helmet написан в стиле Connect и совместим с фреймворками, похожими на Express. Если нужна поддержка Koa, смотрите koa-helmet.)

const express = require("express");  
const helmet = require("helmet");
const app = express();
app.use(helmet());


Функция helmet — это оболочка вокруг 11 меньших промежуточных программ. Другими словами эквивалентно

// Это...
app.use(helmet());
// ...И это: 
app.use(helmet.contentSecurityPolicy());  
app.use(helmet.dnsPrefetchControl());  
app.use(helmet.expectCt());  
app.use(helmet.frameguard());  
app.use(helmet.hidePoweredBy());  
app.use(helmet.hsts());  
app.use(helmet.ieNoOpen());  
app.use(helmet.noSniff());  
app.use(helmet.permittedCrossDomainPolicies());  
app.use(helmet.referrerPolicy());  
app.use(helmet.xssFilter());



12. Compression


Compression — инструмент для сжатия данных.

ufrpfwksodmfgbguuhtmk0eazmk.png
Исходники compression

Установка

yarn add compression


Применение


При использовании этого модуля вместе с express или connect просто вызовите compression() в промежуточном ПО. Запросы, проходящие через промежуточное ПО, будут сжаты.

const compression = require('compression')  
const express = require('express')
const app = express()
// сжимать все запросы  
app.use(compression())// ...


А какие инструменты в работе с NodeJS используете вы?

image

Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя онлайн-курсы SkillFactory:
Eще курсы

© Habrahabr.ru