開発中のプロジェクトのlernaリポジトリがあります。互いに依存するいくつかのパッケージがあります。開発を容易にするために、パッケージはいずれも公開されておらず、相互の最新バージョンに依存しています。
ディレクトリツリー
foo/
packages/
core/
package.json
errors/
package.json
foo/packages/core/package.json
{
...
dependencies: {
"@foo/errors": "*"
}
}
Lernaプロジェクトのテストに使用している別のプロジェクトbar
があります。現在、ローカルfile:
依存関係を使用して依存関係にリンクしています。
bar/package.json
{
...
dependencies: {
"@foo/core": "../foo/packages/core"
}
}
このアプローチは私にトラブルの世界を与えました。
bar
でyarn install
できませんでした。ヤーンはfile:
への@foo/core
依存関係に従い、@foo/errors
に依存しており、lernaのシンボリックリンクを知らないことを確認します。これにより、@foo/errors
が見つからないというエラーが発生します。これにより、この複雑な依存関係管理に次いで、このプロジェクトの実際のコードを書くことができました。
プロジェクト構造を機能させるにはどうすればよいですか(かなり簡単ですか?)。この時点で、lerna/yarn/npm/pnpm/Shell scripts/MS DOSを開きます。
「foo」と「bar」の両方を保持するディレクトリにレルナを移動できますか?それは可能ですか?
root/
foo/
packages/
core/
package.json
errors/
package.json
bar/
package.json
lerna.json
Lernaファイルで、リポジトリをパッケージに追加できます
{
"lerna": "2.9.0",
"packages": [
"foo/packages/*",
"bar/",
],
}
npm link
でこれを達成できるはずです。私はnpmで公開されていないローカル依存関係を使用してこれを試していませんが。
ディレクトリツリー
foo/
packages/
core/
package.json
errors/
package.json
bar/
package.json
foo/packages/core/package.json
{
...
dependencies: {
"@foo/errors": "*"
}
}
bar/package.json
{
...
dependencies: {
"@foo/core": "../foo/packages/core"
}
}
次のコマンドを実行します
cd foo
npx lerna clean
npx lerna bootstrap --hoist
npm run build # command to build your projects
cd packages/core
npm link
cd ../../../bar
npm i
npm link @foo/core
Package-lock.jsonファイルを削除すると、通常は害が大きくなります。また、@foo/errors
が見つからない場合、npmブートストラップを実行した場合、@foo/core
は@foo/errors
にシンボリックリンクされている必要があります。可能性の1つは、lernaスクリプトがnpmを使用しているときに、糸でインストール/リンクを実行していることです。
使用はそのように試すことができます:
foo/packages/core/package.json
{ ... dependencies: { "@foo/errors": "file:../errors" } }
bar/package.json
{ ... dependencies: { "@foo/core": "file:../foo/packages/core" } }