Перейти к основному содержимому
Неофициальный Бета-перевод

Эта страница переведена PageTurner AI (бета). Не одобрена официально проектом. Нашли ошибку? Сообщить о проблеме →

Устранение неполадок

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

Команда import

Проблемы с буфером при импорте

При попытке импортировать репозиторий с большим количеством коммитов может возникнуть ошибка вида:

DeprecationWarning: Unhandled promise rejections are deprecated

или

Error: spawnSync /bin/sh ENOBUFS during ImportCommand.execute

Решение:

Запустите lerna import с флагом --max-buffer, указав достаточно большое значение в байтах. На момент написания статьи значение по умолчанию составляет 10 МБ — учитывайте этот факт.

Невозможность импорта коммитов слияния, содержащих конфликты

При попытке импортировать репозиторий, содержащий коммиты слияния с разрешёнными конфликтами, команда import завершается с ошибкой:

lerna ERR! execute Error: Command failed: git am -3
lerna ERR! execute error: Failed to merge in the changes.
lerna ERR! execute CONFLICT (content): Merge conflict in [file]

Решение

Используйте флаг --flatten при запуске lerna import для импорта истории в "плоском" режиме, где каждый коммит слияния представляется как единое изменение.

Сбой при незакоммиченных изменениях в Git

Ошибка fatal: ambiguous argument 'HEAD': возникает, если в проекте присутствуют незакоммиченные изменения.

Решение

Перед импортом пакетов через lerna import закоммитьте все изменения в вашем Lerna-проекте.

Команда publish

publish не обнаруживает ручные теги в fixed mode (Github/Github Enterprise)

Github и Github Enterprise используют легковесные Git-теги при создании релизов через веб-интерфейс, тогда как Lerna использует аннотированные теги.

Из-за этого Lerna может игнорировать ранее опубликованные релизы, созданные вручную через веб-интерфейс Github.

Пример истории публикаций:

  • v1.1.0 опубликован и помечен тегом через lerna publish

  • v1.2.0 опубликован вручную и помечен тегом через веб-интерфейс Github

  • v1.2.1 опубликован вручную и помечен тегом через веб-интерфейс Github

Запуск lerna publish определит v1.1.0 как последний релизный тег вместо v1.2.1.

Последствия зависят от вашего использования lerna publish:

  • Запрос публикации будет использовать v1.1.0 как основу для предложений major/minor/patch

  • При использовании флага --conventional-commits:

    • Предлагаемое увеличение версии semver будет основано на всех коммитах с v1.1.0 (включая коммиты v1.2.0, v1.2.1)
    • Сгенерированные файлы CHANGELOG.md продублируют уже выпущенные коммиты из v1.2.0, v1.2.1

Решение:

По возможности используйте lerna publish вместо ручных релизов.

Для новых ручных релизов применяйте git tag -a -m <version> вместо веб-интерфейса Github.

Существующие легковесные теги можно преобразовать в аннотированные следующим образом:

GIT_AUTHOR_NAME="$(git show $1 --format=%aN -s)"
GIT_AUTHOR_EMAIL="$(git show $1 --format=%aE -s)"
GIT_AUTHOR_DATE="$(git show $1 --format=%aD -s)"
GIT_COMMITTER_NAME="$(git show $1 --format=%cN -s)"
GIT_COMMITTER_EMAIL="$(git show $1 --format=%cE -s)"
GIT_COMMITTER_DATE="$(git show $1 --format=%cD -s)"

git tag -a -m $1 -f $1 $1

git push --tags --force

Подробности см. в публикации на Stackoverflow

Публикация в приватный npm-реестр (Artifactory, npm Enterprise и др.)

Если lerna publish завершается с ошибкой, убедитесь в наличии следующих настроек в package.json:

	"publishConfig": {
"registry": "https://[registry-url]"
}

Возможно, вам также потребуется добавить следующее в файл .npmrc для конкретных пакетов:

registry = https://[registry-url]
информация

Lerna всегда использует инструментарий npm для публикации пакетов, независимо от параметра npmClient в файле lerna.json. Это означает, что любые конфигурации yarn или pnpm не будут учитываться. Для успешной публикации в приватный реестр убедитесь, что npm правильно настроен через переменные окружения или файл .npmrc.

Отладка Jest / Visual Studio Code

Вы можете выполнять отладку тестов Jest в пакетах, управляемых Lerna, с помощью Visual Studio Code. Работа с точками останова возможна при использовании приведённой ниже конфигурации запуска в файле <root>/.vscode/launch.json монорепозитория. В этом примере запускается Jest для пакета my-package внутри монорепозитория.

{
"name": "Jest my-package",
"type": "node",
"request": "launch",
"address": "localhost",
"protocol": "inspector",
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/lerna",
"runtimeArgs": [
"exec",
"--scope",
"my-package",
"--",
"node"
],
"args": [
"${workspaceRoot}/node_modules/jest/bin/jest.js",
"--runInBand",
"--no-cache",
"packages/my-package"
]
}
  • --runInBand предотвращает параллельное выполнение тестов в нескольких процессах

  • --no-cache помогает избежать проблем с кешированием

Протестировано с Visual Studio Code v1.19.3 и Jest v22.1.4.