Эта страница переведена 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.