このページは PageTurner AI で翻訳されました(ベータ版)。プロジェクト公式の承認はありません。 エラーを見つけましたか? 問題を報告 →
トラブルシューティング
このドキュメントでは、Lernaの使用中にユーザーが過去に遭遇した特定の問題に対する解決策を記載しています。
import コマンド
インポート中のバッファ問題
大量のコミットがあるリポジトリをインポートしようとすると、次のようなエラーが発生する可能性があります:
DeprecationWarning: Unhandled promise rejections are deprecated
または
Error: spawnSync /bin/sh ENOBUFS during ImportCommand.execute
解決策:
lerna import を --max-buffer フラグ付きで実行し、十分に大きな数値(バイト単位)を指定してください。この記事執筆時点でのデフォルト値は10MBですので、これを目安にしてください。
マージコンフリクトコミットのインポート失敗
コンフリクト解消が必要なマージコミットを含むリポジトリをインポートしようとすると、次のエラーでインポートコマンドが失敗します:
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]
解決策
lerna import に --flatten フラグを付けて実行し、履歴を「フラット」モードでインポートしてください。これにより各マージコミットが単一の変更として扱われます。
Gitツリーに未コミット変更がある場合の失敗
現在のプロジェクトに未コミットの変更がある場合、fatal: ambiguous argument 'HEAD': エラーが発生します。
解決策
lerna import でパッケージをインポートする前に、Lernaプロジェクト内のすべての変更をコミットしてください。
publish コマンド
fixedモードで手動作成タグが検出されない問題(GitHub/GitHub Enterprise)
GitHubとGitHub EnterpriseはWeb UI経由でリリース作成時に軽量Gitタグを使用しますが、Lernaは注釈付きタグを使用します。
これにより、手動で公開されGitHub Web UIでタグ付けされた以前のリリースがLernaによって無視される問題が発生する可能性があります。
例えば公開履歴が次のような場合:
-
v1.1.0 は
lerna publishで公開・タグ付け -
v1.2.0 は手動公開(GitHub Web UIでタグ付け)
-
v1.2.1 は手動公開(GitHub Web UIでタグ付け)
この状態で lerna publish を実行すると、最終リリースタグとして v1.2.1 ではなく v1.1.0 が検出されます。
これによる影響は lerna publish の使用方法によって異なります:
-
公開プロンプトが major/minor/patch の提案ベースとして v1.1.0 を使用
-
--conventional-commitsフラグ使用時:- v1.1.0以降の全コミット(v1.2.0、v1.2.1などのコミットを含む)に基づいてsemverインクリメントを提案
- 生成されるCHANGELOG.mdファイルにはv1.2.0やv1.2.1で既にリリース済みのコミットが重複して記載される
解決策:
可能であれば、手動リリースではなく lerna publish を使用してください。
新しい手動リリースでは、GitHub Web UIの代わりに git tag -a -m <version> を使用してください。
既存の軽量タグは、次のような方法で注釈付きタグに変換できます:
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はlerna.jsonファイルで設定されたnpmClientに関係なく、常にnpmツールを使用してパッケージを公開します。これはyarnやpnpmの設定が検知されないことを意味します。プライベートレジストリへの公開を成功させるには、環境変数または.npmrcファイルでnpmが適切に設定されていることを確認してください。
Jest / Visual Studio Code デバッグ
Lerna管理下のパッケージでJestテストをVisual Studio Codeでデバッグ可能です。モノレポのルート<root>/.vscode/launch.jsonファイルに以下のvscode起動設定を追加すると、ブレークポイントを使用したデバッグが機能します。この例ではモノレポ内のmy-packageパッケージ向けにJestを起動します。
{
"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 で動作確認済み。