メインコンテンツへスキップ

トラブルシューティング

このドキュメントには、Lernaを使用する際にユーザーが過去に遭遇した特定の問題の解決策が含まれています。

importコマンド

import時のバッファ問題

多くのコミットが含まれるリポジトリをインポートしようとすると、次のようなエラーが発生する可能性があります。

DeprecationWarning: Unhandled promise rejections are deprecated

または

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

解決策:

lerna importコマンドに--max-bufferフラグを指定し、十分な大きさの数値(バイト単位)を指定します。この記述時点では、基礎となるデフォルトは10MBなので、それを考慮する必要があります。

マージコンフリクトを含むコミットはインポートできません

コンフリクト解決が必要だったマージコミットを含むリポジトリをインポートしようとすると、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]

解決策

lerna importコマンドに--flattenフラグを指定して、「フラット」モードで履歴をインポートします。つまり、各マージコミットを、マージによって導入された単一の変更としてインポートします。

Gitツリーにコミットされていない変更がある場合に失敗する

現在のプロジェクトに**コミットされていない変更**がある場合、fatal: ambiguous argument 'HEAD':エラーが発生します。

解決策

lerna importを使用してパッケージをインポートする前に、Lernaプロジェクトですべての変更をコミットしてください。

publishコマンド

Github/Github Enterpriseで固定モードを使用する場合、手動で作成されたタグがpublishコマンドで検出されない

GithubとGithub Enterpriseは、ウェブUIを通じてリリースが作成されるときに軽量Gitタグを使用しますが、Lernaは注釈付きタグを使用します。

これにより、Lernaが手動で実行され、GithubウェブUIでタグ付けされた以前に公開されたリリースを無視する問題が発生する可能性があります。

たとえば、公開履歴が次のようだったとします。

  • v1.1.0がlerna publishで公開およびタグ付けされました。
  • v1.2.0がGithubウェブUIで手動で公開およびタグ付けされました。
  • v1.2.1がGithubウェブUIで手動で公開およびタグ付けされました。

ここでlerna publishを実行すると、最新のリリースタグとしてv1.2.1ではなくv1.1.0が検出されます。

これの影響は、lerna publishの使用方法によって異なります。

  • publishプロンプトは、メジャー/マイナー/パッチの候補として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ウェブ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でのデバッグ

Jestテストを、Visual Studio Codeを使用してLernaで管理されているパッケージでデバッグできます。ブレークポイントを使用したデバッグは、モノレポの<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でテスト済みです。