Создание и поддержка многопакетных проектов JavaScript на основе lerna

внешний интерфейс JavaScript Примечания
Создание и поддержка многопакетных проектов JavaScript на основе lerna

Привет всем, яЛуожу🎋, деревянный фронтенд, живущий в Ханчжоу 🧚🏻‍♀️, если вам понравилась моя статья 📚, вы можете помочь мне собрать духовную силу ⭐️ лайком.

Разделение большого репозитория кода на несколько пакетов с независимыми версиями полезно для совместного использования кода. Однако некоторые изменения могут стать громоздкими и трудными для отслеживания, если они охватывают несколько репозиториев, а тестирование в нескольких репозиториях может быстро стать очень сложным.

Чтобы решить эти (и многие другие) проблемы, некоторые проекты разбивают репозиторий кода на несколько пакетов и помещают каждый пакет в отдельный репозиторий кода. Однако такие проекты, как Babel, React, Angular, Ember, Meteor, Jest и многие другие, содержат и разрабатывают несколько пакетов в одном репозитории кода.

Lerna — это инструмент, оптимизированный для рабочего процесса управления многопакетными репозиториями кода с использованием git и npm.

Начинать

Установить lerna глобально

$ npm install lerna -g

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

$ lerna init --independent

В настоящее время ваш репозиторий кода должен выглядеть так:

lerna-repo/
  packages/
  package.json
  lerna.json

создать пакет

$ lerna create module-1
$ lerna create module-2

yarn workspaces & Lerna Hoisting

использоватьyarn workspacesОбъединить ЛернуuseWorkspacesможет быть реализованLerna Hoisting. Это не лишнее, это позволяет управлять зависимостями в едином месте (корневом каталоге), что экономит время и место.

Настройте lerna.json:

{
  ...
  "npmClient": "yarn",
  "useWorkspaces": true
}

В файле package.json верхнего уровня должен быть массив рабочих областей:

{
  "private": true,
  ...
  "workspaces": ["packages/*"]
}

npm registry

построить вердаччо

verdaccio — легкий частный сервер npm с открытым исходным кодом.

Установить глобально:

$ npm install verdaccio -g

настроить~/.config/verdaccio/config.yaml uplinks:

---
# a list of other known repositories we can talk to
uplinks:
  npmjs:
    url: https://registry.npmjs.org/
  taobao:
    url: https://registry.npm.taobao.org/
  tuya:
    url: https://registry-npm.tuya-inc.top/

Настроить автоматический запуск

0. бежатьsudo npm i -g pm2

1. бежатьpm2 start verdaccio & pm2 startup

outputs:

[PM2] Init System found: launchd
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/usr/local/bin /usr/local/lib/node_modules/pm2/bin/pm2 startup launchd -u luozhu --hp /Users/luozhu

2. бежатьsudo env PATH=$PATH:/usr/local/bin /usr/local/lib/node_modules/pm2/bin/pm2 startup launchd -u luozhu --hp /Users/luozhu

outputs:

[PM2] Freeze a process list on reboot via:
$ pm2 save

[PM2] Remove init script via:
$ pm2 unstartup launchd

Изменить lerna publishConfig

// lerna.json
{
  "ignoreChanges": [
    "ignored-file",
    "**/__tests__/**",
    "**/*.md"
  ],
  "command": {
    "publish": {
      "registry": "http://localhost:4873"
    },
    "version": {
      "conventionalCommits": true,
      "message": "chore(release): publish"
    }
  }
}

Примечание. Если дополнительный пакет сscopeДа, его нужно установить для подпакетовpublishConfig.access

commitlint & commitizen

Пожалуйста, обратитесь к моей предыдущей статьеПолучите нормализованный Git Commit в одной статье

Процесс развития

install

$ yarn install

зависимости пакета

Установите зависимости для указанного пакета:

# 或者(推荐)
$ lerna add lodash packages/module-1
# 或者
$ lerna add lodash --scope=module-1
# 或者
$ lerna add lodash **/module-1
# 或者
$ yarn workspace module-1 add lodash

Установите зависимости для всех пакетов:

$ lerna add lodash

Зависимости между рабочими пространствами

$ lerna add module-2 --scope module-1
# 或者
$ lerna add module-2 packages/module-1

Общие зависимости инструментов

$ yarn add -WD typescript

lerna.json

  • версия: версия текущего репозитория, пожалуйста, установите независимый режим наindependent
  • npmClient: укажите клиентскую программу для запуска команды (по умолчанию npm)
  • ignoreChanges: один не включен вlerna changed/publishМассив глобусов. Используйте это, чтобы заблокировать выпуск ненужных обновлений, таких как исправленияREADME.md
  • command
    • publish
      • реестр: установите собственный прокси-сервер npm (например, частный сервер, созданный с помощью verdaccio)
      • обычные коммиты:lerna versionАвтоматически определять скачки версий и генерировать файлы CHANGELOG
      • message: Пользовательское сообщение фиксации при публикации. Для получения подробной информации, пожалуйста, проверьте@lerna/version

npm scripts

{
  "scripts": {
    "release:beta": "lerna publish --canary --pre-dist-tag=beta --preid=beta --yes",
    "release:rc": "lerna publish prerelease --pre-dist-tag=rc --preid=rc",
    "release:next": "lerna publish prerelease --pre-dist-tag=next --preid=next",
    "release:preminor": "lerna publish preminor --pre-dist-tag=next --preid=next",
    "release:premajor": "lerna publish premajor --pre-dist-tag=next --preid=next",
    "release": "lerna publish",
    "release:minor": "lerna publish minor",
    "release:major": "lerna publish major",
    "commit": "git cz"
  }
}

Эта статья была впервые опубликована в "Официальный сайт Луожу", синхронизировано с официальным аккаунтом"Дом утреннего чая в Луочжу"а также"Колонка самородков".