Лучшие практики управления интерфейсными модулями в lerna

внешний интерфейс GitHub модульный тест NPM

Недавно использовал на работе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 изменен, его необходимо освободить. Тогда ваша работа имеет это.

  1. Измените номер версии модуля-2 и отпустите его.
  2. Измените зависимости модуля-1, измените номер версии модуля-1 и опубликуйте.

Это всего два пакета, если зависимости более сложные, можно подумать о загруженности публикацией.

Что такое lerna?Зачем использовать lerna?

Какая к черту лерна? Вот как это описано на официальном сайте lerna.

A tool for managing JavaScript projects with multiple packages.

Можно сказать, что это введение очень понятное: после появления lerna упомянутые выше проблемы не только решены, но и дают разработчикам возможность управлять многопакетными проектами JavaScript.

  1. Автоматически разрешать зависимости между пакетами
  2. пройти черезgitОбнаружение изменений файлов и автоматическая публикация
  3. согласно сgitОтправляйте записи, автоматически генерируйте CHANGELOG

Базовый рабочий процесс с использованием lerna

Конфигурация среды

  • Гит В проекте lerna управление кодом осуществляется через git. Поэтому сначала вам нужно убедиться, что у вас есть правильная среда git локально. Если для совместной разработки вам нужно несколько человек, сначала создайте ссылку на правильный центральный репозиторий git. Поэтому вам нужно понимать основные операции git, поэтому я не буду их здесь повторять.
  • npm-репозиторий Независимо от того, должен ли пакет, которым вы управляете, быть опубликован на официальном веб-сайте или на частном сервере компании, вам нужен правильный адрес репозитория и имя пользователя. Вы можете запустить следующую команду, чтобы проверить, локальный npmregistryАдрес правильный.
npm config ls
  • Лерна Вам необходимо установить инструмент lerna глобально.
npm install lerna -g

Инициализировать проект lerna

В этом примере я будуd:/Инициализируйте проект lerna в корневом каталоге.

  1. существуетd:/Создайте пустую папку под именемlerna-demo
mkdir lerna-demo
  1. инициализация Войдите в соответствующий каталог через cmd для инициализации
cd d:/lerna-demo
lerna init

После успешного выполнения в каталоге будет сгенерирована такая структура каталогов.

 - packages(目录)
 - lerna.json(配置文件)
 - package.json(工程描述文件)
  1. добавить тестовый пакет

По умолчанию пакет помещается в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

  1. Установите каждую зависимость пакетов Этот шаг описан на официальном сайте.

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 были установлены.

  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опыт и обобщить лучшие практики. Ниже приведены некоторые особенности.

  1. Принять независимый режим
  2. согласно сGitОтправьте информацию, автоматически создайте журнал изменений
  3. проверка правил eslint
  4. более красивый код автоматического формата
  5. Отправить код, хук для проверки кода
  6. Следуйте спецификации версии semver

Вы также должны увидеть, что в процессе разработки такого рода проектов наиболее важным моментом является то, чтоТехнические характеристики. Поскольку существуют различные сценарии применения, вы должны убедиться, что выпущенный пакет стандартизирован, код стандартизирован и все можно отследить. Я думаю, это очень важно.код гитхаба

Интеграция инструментов

Все инструменты, представленные здесь, предназначены для решения проблемы, то есть спецификации разработки и кода.

  • husky
  • lint-staged
  • prettier
  • eslint