В большинстве проектов Full Stack Javascript вы обнаружите, что во время разработки интерфейс и серверная часть приложения управляются в разных репозиториях. Поначалу это нормально, но по мере роста приложения становится очень трудно управлять. К недостаткам можно отнести:
- Установка одинаковых пакетов в каждое приложение
- Выполнение аналогичных команд по отдельности.
Lerna помогает решить эту проблему, позволяя легко управлять несколькими JS-приложениями / репозиториями с помощью:
- Разрешение совместного использования общих пакетов во всех приложениях
- Разрешение совместного использования команд во всех приложениях
Давайте посмотрим на пример
Пример
Для начала нам необходимо установить Lerna
$ npm install --global lerna
Затем создайте папку для пакетов Lerna.
$ mkdir lerna-example && cd lerna-example
Чтобы инициализировать Lerna:
$ lerna init
Структура папок будет выглядеть так
lerna-example/
packages/
package.json
lerna.json
Теперь мы можем добавить наши приложения в папку пакетов, чтобы они выглядели примерно так.
packages/
front-end/
package.json
backend/
package.json
Чтобы связать общие пакеты в двух только что созданных приложениях, нам нужно будет добавить команду сценария на крайний package.json
"scripts": {
"bootstrap": "lerna bootstrap"
}
Запустив команду bootstrap, Лерна установит зависимости, перечисленные в обоих приложениях, и свяжет любые перекрестные зависимости. Это то же самое, что запуск yarn install
в каждом из приложений, но вместо этого Lerna связывает пакеты, которые зависят друг от друга.
Для второй части нам нужно запустить оба приложения одной командой. Для этого мы добавим сценарий npm в каждое приложение для запуска.
backend
"scripts": {
"start": "react-scripts start"
}
front-end
"scripts": {
"start": "node app.js"
}
В нашем родительском package.json
нам также нужно будет включить стартовый скрипт.
"scripts": {
"start": "lerna run start"
}
Используя lerna run
, Лерна будет искать в файле package.json каждого пакета сценарий npm, который соответствует сценарию, и запускает его. Это так просто.
Для получения дополнительной информации посетите страницу Lerna на GitHub.