web-dev-qa-db-ja.com

ローカルプロジェクトがローカルlernaパッケージに依存することを許可する

開発中のプロジェクトの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"
  }
}

このアプローチは私にトラブルの世界を与えました。

  • Npmを使用すると、常に ENOENT .DELETE errors でヒットします。 package-lock.jsonを削除して再インストールすると、私の人生が何年もかかります。
  • 糸を使用して、baryarn installできませんでした。ヤーンはfile:への@foo/core依存関係に従い、@foo/errorsに依存しており、lernaのシンボリックリンクを知らないことを確認します。これにより、@foo/errorsが見つからないというエラーが発生します。

これにより、この複雑な依存関係管理に次いで、このプロジェクトの実際のコードを書くことができました。

プロジェクト構造を機能させるにはどうすればよいですか(かなり簡単ですか?)。この時点で、lerna/yarn/npm/pnpm/Shell scripts/MS DOSを開きます。

22
Jack Guy

「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/",
  ],
}
4
Doppio

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を使用しているときに、糸でインストール/リンクを実行していることです。

3
jjbskir

使用はそのように試すことができます:
foo/packages/core/package.json

{ ... dependencies: { "@foo/errors": "file:../errors" } } bar/package.json

{ ... dependencies: { "@foo/core": "file:../foo/packages/core" } }

0
Suhosauge