Повторное использование кода - это хорошо, может быть полезно разделение вашего проекта на несколько небольших пакетов, на нем легче сосредоточиться при работе в командах. Всегда лучше разбить проблему на более мелкие части.
Но когда дело доходит до управления этими пакетами, это быстро превращается в кошмар, все зависит друг от друга, обновляются несколько пакетов и поддерживаются отдельные репозитории.
Вот тут-то и пригодятся монорепозитории. В одном репозитории может быть несколько пакетов. Все они могут использовать одну и ту же папку node_modules. Вы можете легко сделать их зависимыми друг от друга и опубликовать их все сразу. Не нужно управлять версиями, lerna позаботится об этом.
Начиная
Инициализируйте свой проект с помощью следующей команды.
$ yarn init
Это должно создать ваш package.json
файл.
Здесь вы должны workspaces
указать папки, в которых вы создали свои пакеты. Обратите внимание на version
здесь, это 1.0.0
в начале, но по мере вашего продвижения, lerna будет обновлять его соответственно.
Хороший образец - использовать конфигурацию conventionalCommits
с lerna для управления версиями. Подробнее об этом можно прочитать здесь.
Eg. package.json
При следующем запуске lerna init
вы можете комбинировать флаг --independent
, если хотите поддерживать версии каждого пакета отдельно.
Eg. lerna.json
Параметр useWorkspaces
позволяет нам повторно использовать параметр для рабочих пространств Yarn в качестве параметра рабочего пространства Лерны.
Вы можете переключить параметр npmClient
с yarn
на npm
, если хотите, чтобы npm
запускал все ваши команды. Наконец, параметр commands
настроен на использование conventionalCommits
для нашего процесса публикации.
Добавление пакетов
Вы можете создать папку пакетов и начать добавлять туда свои пакеты или использовать эту команду $ npx lerna create @projectName/packagename
.
Добавление пакетов npm в качестве зависимостей
С рабочими областями yarn вам не нужно подключаться к каждой папке пакетов, чтобы установить зависимости, все, что вам нужно сделать, это $ yarn workspace @projectName/yourpackagename add npm-package-name
Если вы хотите установить общие зависимости, $ yarn add -W --dev typescript prettier eslint
.
Довольно гладко, правда? 😎
Издательский
После того, как вы разместили свои пакеты в соответствующих каталогах, самое время их опубликовать. lerna publish
- это команда, используемая для публикации ваших пакетов.
Если вы использовали шаблон Обычные фиксации, вы можете использовать флаг --conventional-commits
с приведенной выше командой, чтобы определить версию вашего пакета. С помощью этой опции Лерна генерирует CHANGELOG.md
для новой версии.
Вот пример.
$ npx lerna publish --conventional-commits
lerna notice cli v3.19.0
lerna info versioning independent
lerna info Looking for changed packages since @zoomify/[email protected]
lerna info getChangelogConfig Successfully resolved preset "conventional-changelog-angular"
Changes:
- @zoomify/rest-api-client: 1.0.0 => 1.1.0
- @zoomify/cutomize-uploader: 3.0.1 => 3.0.2
? Are you sure you want to publish these packages? (ynH)
:
Successfully published:
- @zoomify/[email protected]
- @zoomify/[email protected]
lerna success published 2 packages
Запускать npm-скрипты в нескольких пакетах
Даже с удобными командами рабочих пространств пряжи может быть сложно тестировать и создавать каждый пакет, если вы хотите запустить команду для всех пакетов, просто сделайте это,
Например, допустим, я хочу собрать все свои пакеты перед публикацией. $ npx lerna run build --stream
, это вызовет команду сборки, указанную в package.json
файлах каждого пакета.
Вывод
В этом отношении одними из лучших примеров являются репозиторий React на Github. Помните, что для знакомства с монорепозиториями требуется практика. Несколько недель работы над ними научат вас.