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

Автор оригинала: Indrek Lasn
  • Перевод


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

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

1. Husky


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


Исходники 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.


Исходники 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.


Исходники 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.





5. Ramda


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


Исходники 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.


Исходники 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

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




7. Flat


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


Исходники 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.


Исходники 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.


Исходники ESLint

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


yarn add eslint

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

./node_modules/.bin/eslint --init

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

./node_modules/.bin/eslint yourfile.js

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



10. PM2


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


Исходники pm2

Установка


yarn add global pm2

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


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

pm2 start app.js

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

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

pm2 ls



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



11. Helmet


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


Исходники 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 — инструмент для сжатия данных.


Исходники 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:



SkillFactory
Онлайн-школа Data Science и разработки

Комментарии 11

    +11
    Спасибо за 12 случайных пакетов из npm.
      –1
      сердечно благодарим за превосходное и несомненно полезное сарказмирование
        0
        Обращайтесь.
      +2
      Для удобства отладки использую связку chokidar + puppeteer. Позволяет отслеживать сохранение файлов и перезагружать вкладку браузера в самом простом сценарии использования. В принципе для этого можно даже использовать live.js.
      Более сложный сценарий: по сохранению файла идет сообщение на сервер, специальным скриптом перезапускается сервер, по завершению перезапуска сервера идет сообщение обратно на клиент, там обновляется вкладка браузера и автоматически делается несколько действий пользователя. На быстрой машине процесс занимает пару секунд. Или пару минут, если все делать вручную )))
        +6
        Ну и как это поможет моей продуктивности?
          +4
          Наверное, дело привычки или вкуса, но это
          import * as R from 'ramda'
          const greet = R.replace('{name}', R.__, 'Hello, {name}!'); 
          greet('Alice'); //=> 'Hello, Alice!'
          

          никак не ассоциируется у меня с
          простой, элегантный код
            +1

            Да там, в принципе, и описания достаточно:


            … это практичная и полезная библиотека в функциональном стиле. Она подчеркивает чистый функциональный стиль. Неизменность и свободные от побочных эффектов функции лежат в основе философии дизайна Ramda.
              +3
              Интересно, зачем демонстрируют то, что итак можно сделать без всякий дополнительных либ:
              const greet = (name) => 'Hello, {name}!'.replace('{name}', name);
              greet('Alice'); //=> 'Hello, Alice!'
              
                +1
                Нет особого смысла использовать рамду как замену lodash. Рамда начинает раскрываться при написании трансдьюсеров, алгебраических структур данных, линз. А приведенный пример ни о чем, вы правы.
                Вот рекомендую Thinking in Ramda. Осторожно, вызывает привыкание.
                0
                7. Flat
                А есть что-то для обратного процесса? Из:
                {  
                  'key1.keyA': 'valueI',  
                  'key2.keyB': 'valueII',  
                  'key3.a.b.c': 2  
                }
                Получить:
                {  
                    key1: {  
                        keyA: 'valueI'  
                    },  
                    key2: {  
                        keyB: 'valueII'  
                    },  
                    key3: { a: { b: { c: 2 } } }  
                }
                  +2
                  const unflatten = require('flat').unflatten

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

                Самое читаемое