Примечание. Это часть серии из 12 частей, так что следите за новостями!
‹---------------- Часть 1 Часть 2 ››

За последние несколько лет я обнаружил, что использование 12-факторных принципов в качестве руководства при создании приложений невероятно полезно для получения масштабируемых, поддерживаемых и разумных результатов.

Однако трудно найти конкретные примеры принципов в действии и того, как они связаны с JavaScript, и поэтому я надеюсь решить эту проблему с помощью этой серии из 12 статей, охватывающих, как ни странно, 12 факторов.

Приведенный здесь материал определенно не будет новаторским или революционным, но мы надеемся, что он предоставит некоторые твердые основы и лучшие практики в отношении JavaScript (как на стороне клиента, так и на стороне сервера), которые вы сможете использовать в своих собственных проектах.

II. Зависимости

Явно объявляйте и изолируйте зависимости

Второй фактор определяет способы включения внешнего кода или инструментов в 12-факторное приложение. Обобщить:

  • Объявите все свои зависимости в манифесте и установите их с помощью диспетчера пакетов / сборщика пакетов.
  • Изолируйте свое приложение от окружающей системы, чтобы не допустить «утечки» инструментов.
  • Применяйте один и тот же манифест и изоляцию ко всем средам

Как правило, применение этих правил дает следующие преимущества:

  • Чтобы упростить настройку разработчика, достаточно просто проверить код и запустить команду установки. Теоретически он должен удалить ошибки «работает на моей машине».
  • Изоляция зависимостей также сделает развертывание разработки и производства максимально похожим, обеспечивая согласованность и надежность.

Как это применимо к JavaScript?

В настоящее время в экосистеме JavaScript есть два основных инструмента управления зависимостями: npm и yarn. Я не стану начинать войну по поводу того, что здесь «лучше», так как совет в равной степени применим к обоим.

Вы должны объявить свои зависимости в package.json файле в корне репозитория ваших приложений. Он должен содержать все зависимости вашего приложения, разделенные между devDependencies, которые вашему приложению нужны только во время разработки (например, инструменты тестирования), и dependencies, которые ваше приложение должно фактически запускать. Это позволит вам использовать рабочие команды установки npm install --production и yarn install --production. Вы должны объявить точные версии зависимости (3.4.1 вместо ^ 3.4.1), так как это гарантирует, что вы точно знаете, какая версия зависимости будет установлена, и поможет избежать таких ситуаций, как инцидент с потоком событий.

После запуска npm install или yarn install ваша node_modules папка будет заполнена, и вы сможете использовать пакеты в своем коде, используя require("some-module"). Подробное объяснение того, как это работает, можно найти в этой статье.

Какой бы инструмент вы ни использовали, убедитесь, что вы используете файл блокировки (package-lock.json или yarn.lock), чтобы убедиться, что ваши дочерние подразделения заблокированы, а также ваши зависимости.

Для JavaScript нет явного инструмента изоляции зависимостей, но использование Docker с образами узлов по умолчанию даст тот же эффект. Точно так же никогда не устанавливайте то, что нужно вашему приложению, используя npm -g <package>, так как это приведет к появлению зависимости в любом другом приложении на вашем компьютере, что сделает некоторые результаты несовместимыми.

А как насчет этих примеров?

Снова мы можем взглянуть на Агентство пищевых стандартов для некоторых примеров. Взгляните на приложение здесь для примера с использованием npm и здесь для примера с использованием yarn. Вы также можете сравнить файлы package.json здесь на предмет разницы между зависимостью и devDependency.

Вы также заметите в этих приложениях файлы Docker, которые используются для запуска локальных версий приложений, изолированных от внешней системы. В производственной среде эти приложения развертываются с помощью Службы приложений Azure, которая обеспечивает тот же результат за счет изоляции приложения внутри контейнера Docker.

Спасибо за прочтение! Если у вас есть какие-либо комментарии или вопросы, разместите их ниже, и я вам отвечу. Я буду периодически публиковать оставшуюся часть этой серии на Medium, так что продолжайте в курсе, если хотите прочитать остальную часть.

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