2

TL;DR ローカル ヤーン ワークスペース依存関係のエイリアスを作成するにはどうすればよいですか?

以前に糸のワークスペースを試したことがありますが、成功したことはありません。もう一度試してみます。

入れまし"workspaces": ["packages/*"]package.json

パッケージごとに、命名規則を使用して@-/package-name命名の競合を防ぎ、内部パッケージの名前空間を気にすることなく使用することにしました。

パッケージを依存関係として追加するとき、解決のためにインターフェイス名を使用するスタイルに従ってきましたが、それを具体的な実装に向けています。これは、yarn ワークスペースを使用する前に行ったことです。

"dependencies": {
  "my-interface-name": "file:some/path/to/packages/some-concrete-implementation"
}

これは基本的に、私がコンパイル時の静的依存性注入と呼んでいるものを許可するためです。また、各パッケージが必要に応じてインターフェイスの依存関係に個別に名前を付け、名前の競合を防ぐこともできます。

ただし、yarn ワークスペースでこれを達成する方法がわかりません。@-/some-concrete-implementationと呼ばれる糸ワークスペース パッケージのエイリアスを作成するにはどうすればよいmy-interface-nameですか?

私がすでに試したことは成功していません:

  • 依存関係を次のように定義する"my-interface-name": "@-/some-concrete-implementation"}- 何らかの理由で、yarn が@-/some-concrete-implementationローカル ワークスペースではなく npm レジストリを検索するようになる
  • ワークスペース プロトコルも使用しようとしまし"my-interface-name": "workspace:@-/some-concrete-implementation"}たが、npm レジストリでパッケージを探します。

私がまだ試していないことは機能しますが、そもそも糸ワークスペースを使用する利点がなくなります。

  • "dependencies": {"my-interface-name": "file:../../node_modules/@-/some-concrete-implementation"}"
4

2 に答える 2

4

resolutionspackage.json キーを見たことがありますか? それはあなたが必要とするものですか?

外部パッケージのエイリアス/オーバーライドに使用しましたが、ドキュメントの例では、ローカル パッケージで動作することが示されています。

決議事項

特定のネストされた依存関係のバージョンをオーバーライドできます。完全な仕様については、 Selective Versions Resolutions RFCを参照してください。

{
  "resolutions": {
    "transitive-package-1": "0.0.29",
    "transitive-package-2": "file:./local-forks/transitive-package-2",
    "dependencies-package-1/transitive-package-3": "^2.1.1"
  }
}

RFC から:

"**/a" は、プロジェクトのネストされたすべての依存関係 a を示します。

"a" は **/a のエイリアスです (レトロ互換性については、以下を参照してください。また、そのようなエイリアスでない場合、ネストされていないプロジェクトの依存関係の 1 つを表すため、何の意味もありません。以下で説明するようにオーバーライドすることはできません)。

したがって、必要なルールは次のとおりだと思います。

"**/my-interface-name": "file:some/path/to/packages/some-concrete-implementation"

// OR equivalent

"my-interface-name": "file:some/path/to/packages/some-concrete-implementation"

パッケージのpackage.jsonで機能すると思います。最悪の場合、それをワークスペースのルートに巻き上げて、「a/b」などのワークスペースに固有のルールを作成できます。

于 2020-05-12T12:01:00.210 に答える