Недавно использовал на работе
lerna
Управление интерфейсными пакетами значительно повысило эффективность. Итак, я намерен обобщить некоторый опыт использования lerna за последние месяцы. Есть эти недостатки, пожалуйста, потерпите меня.
Эта статья в основном включает в себя некоторые меры предосторожности при использовании lerna и интеграцию с другими инструментами в процессе использования и, наконец, формирует передовой опыт.
Пакет относится к структуре каталогов, которая может быть выпущена с помощью инструмента управления пакетами npm. Она не подходит для перевода, поэтому давайте используем пакет для ее объяснения.
Проблемы, с которыми сталкиваются пакеты фронтенд-разработки
Когда пакет был впервые разработан, он все еще находился на стадии резки и сжигания. Автоматизированных инструментов нет. Когда пакет выпущен, он модифицируется вручнуюномер версии. Допустимо, если пакетов не много. Но когда число постепенно увеличивается, и между этими пакетами есть зависимости, это очень болезненно для разработчиков. Работа не только утомительная, но и занимает много времени.
Например, если вы хотите поддерживать два пакета. Это модуль-1, модуль-2 соответственно. Ниже приведены зависимости этих двух пакетов.
// module-1 package.json
{
"name": "module-1",
"version": "1.0.0",
"dependencies": {
"module-2": "^1.0.0"
}
}
//module-2 package.json
{
"name": "module-2",
"version": "1.0.0",
}
В такой среде модуль-1 зависит от модуля-2. Если модуль-2 изменен, его необходимо освободить. Тогда ваша работа имеет это.
- Измените номер версии модуля-2 и отпустите его.
- Измените зависимости модуля-1, измените номер версии модуля-1 и опубликуйте.
Это всего два пакета, если зависимости более сложные, можно подумать о загруженности публикацией.
Что такое lerna?Зачем использовать lerna?
Какая к черту лерна? Вот как это описано на официальном сайте lerna.
A tool for managing JavaScript projects with multiple packages.
Можно сказать, что это введение очень понятное: после появления lerna упомянутые выше проблемы не только решены, но и дают разработчикам возможность управлять многопакетными проектами JavaScript.
- Автоматически разрешать зависимости между пакетами
- пройти через
git
Обнаружение изменений файлов и автоматическая публикация - согласно с
git
Отправляйте записи, автоматически генерируйте CHANGELOG
Базовый рабочий процесс с использованием lerna
Конфигурация среды
- Гит В проекте lerna управление кодом осуществляется через git. Поэтому сначала вам нужно убедиться, что у вас есть правильная среда git локально. Если для совместной разработки вам нужно несколько человек, сначала создайте ссылку на правильный центральный репозиторий git. Поэтому вам нужно понимать основные операции git, поэтому я не буду их здесь повторять.
- npm-репозиторий
Независимо от того, должен ли пакет, которым вы управляете, быть опубликован на официальном веб-сайте или на частном сервере компании, вам нужен правильный адрес репозитория и имя пользователя.
Вы можете запустить следующую команду, чтобы проверить, локальный npm
registry
Адрес правильный.
npm config ls
- Лерна Вам необходимо установить инструмент lerna глобально.
npm install lerna -g
Инициализировать проект lerna
В этом примере я буду
d:/
Инициализируйте проект lerna в корневом каталоге.
- существует
d:/
Создайте пустую папку под именемlerna-demo
mkdir lerna-demo
- инициализация Войдите в соответствующий каталог через cmd для инициализации
cd d:/lerna-demo
lerna init
После успешного выполнения в каталоге будет сгенерирована такая структура каталогов.
- packages(目录)
- lerna.json(配置文件)
- package.json(工程描述文件)
- добавить тестовый пакет
По умолчанию пакет помещается в
packages
под каталогом.
// 进入packages目录
cd d:/lerna-demo/packages
// 创建一个packge目录
mkdir module-1
// 进入module-1 package目录
cd module-1
// 初始化一个package
npm init -y
После завершения выполнения структура каталогов в рамках проекта выглядит следующим образом.
--packages
--module-1
package.json
--lerna.json
--package.json
- Установите каждую зависимость пакетов Этот шаг описан на официальном сайте.
Bootstrap the packages in the current Lerna repo. Installs all of their dependencies and links any cross-dependencies.
cd d:/lerna-demo
lerna bootstrap
В текущем тестовом пакете модуль-1 не имеет зависимостей, чтобы быть ближе к реальной ситуации. ты уже в модуле-1package.json
Добавьте в файл некоторые зависимости от сторонних библиотек.
В этом случае, когда вы выполните эту команду, вы обнаружите, что зависимости модуля-1 были установлены.
- выпускать
При публикации необходимо
git
Подходит инструмент. Поэтому перед публикацией убедитесь, что проект lerna в данный момент подключен к удаленному репозиторию git. Вы можете выполнить следующую команду, чтобы просмотреть его.
git remote -v
// print log
origin git@github.com:LittleBreak/lerna-best-practices.git (fetch)
origin git@github.com:LittleBreak/lerna-best-practices.git (push)
Код этой статьи размещен по адресуGithubначальство. Таким образом, эта информация об удаленной ссылке отображается. Если вы не подключились к удаленному репозиторию, сначала создайте пустой репозиторий на github, а затем свяжите его в соответствии с соответствующими инструкциями.
lerna publish
Выполните эту команду, и вы сможете выпускать пакеты шаг за шагом в соответствии с подсказками в cmd.
На самом деле при выполнении этой команды lerna проделает очень много работы.
- Run the equivalent of `lerna updated` to determine which packages need to be published.
- If necessary, increment the `version` key in `lerna.json`.
- Update the `package.json` of all updated packages to their new versions.
- Update all dependencies of the updated packages with the new versions, specified with a [caret (^)](https://docs.npmjs.com/files/package.json#dependencies).
- Create a new git commit and tag for the new version.
- Publish updated packages to npm.
На данный момент это самый простой рабочий процесс lerna. Но у lerna есть и другие возможности, которые ждут вас.
У Lerna есть два режима работы: независимый режим и фиксированный/заблокированный режим.Введение здесь может вызвать проблемы у новичков, но, поскольку оно слишком важно, необходимо упомянуть об этом.
По умолчанию lerna работает в фиксированном/заблокированном режиме, в этом режиме lerna фактически рассматривает проект как единое целое. Каждый раз, когда пакет выпускается, он выпускается полностью, с изменениями или без них. Но в независимом режиме lerna будет сотрудничатьGit
, Проверяйте наличие изменений в файлах и публикуйте пакеты только с изменениями.
Лерна лучшие практики
Для того, чтобы иметь возможность максимизировать эффект lerna, используйте в соответствии с этим временемlerna
опыт и обобщить лучшие практики. Ниже приведены некоторые особенности.
- Принять независимый режим
- согласно с
Git
Отправьте информацию, автоматически создайте журнал изменений - проверка правил eslint
- более красивый код автоматического формата
- Отправить код, хук для проверки кода
- Следуйте спецификации версии semver
Вы также должны увидеть, что в процессе разработки такого рода проектов наиболее важным моментом является то, чтоТехнические характеристики. Поскольку существуют различные сценарии применения, вы должны убедиться, что выпущенный пакет стандартизирован, код стандартизирован и все можно отследить. Я думаю, это очень важно.код гитхаба
Интеграция инструментов
Все инструменты, представленные здесь, предназначены для решения проблемы, то есть спецификации разработки и кода.
- husky
- lint-staged
- prettier
- eslint