メインコンテンツへスキップ
非公式ベータ版翻訳

このページは 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ツールを使用してパッケージを公開します。これはyarnpnpmの設定が検知されないことを意味します。プライベートレジストリへの公開を成功させるには、環境変数または.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 で動作確認済み。