16

ヤーン ワークスペースを使用した monorepo セットアップの採用を開始しており、その中に firebase 関数を配置したいと考えています。リポジトリ構造は次のようなものです。

repo
    node_modules <- all dependencies
    packages
        core
        commom
        functions <- firebase functions

したがって、このセットアップには 2 つの問題があります。

  1. 関数の依存関係は、関数のエントリ ファイルと同じフォルダーに存在しません。
  2. core関数は、リポジトリにあるやなどの他のパッケージに依存しcommomているため、node_modules からリポジトリ内のパッケージへの糸のシンボリック リンクです。

とにかく私はこれを処理できますか?

4

3 に答える 3

3

Yarn 2 を使用node_modulesすると、フェッチされず、それぞれのディレクトリに配置されます(ディレクトリでfunctions呼び出す場合と同様)。したがって、フォルダーの呼び出しが欠落している場合、firebase はこれについて不平を言い、次のエラー (または同様のエラー) で展開プロセスを中止します。npm ifunctionsfirebase deploy --project default --only functionnode_modules

Error parsing triggers: Cannot find module [...]
Try running "npm install" in your functions directory before deploying.

現在、この問題を追跡している 2 つの github の問題があります。

上記の 2 つの問題では、いくつかの巧妙な回避策が firebase ユーザーによって提示されています。たとえば、webpack を使用してリリース内のすべてのローカル パッケージを含むビルドを作成したり、rsync やリリース前にパッケージを再配線するその他のツールを使用したりします。

別の解決策は、可能であれば、プロジェクト パッケージを巻き上げないことです。これを行うには、次の 2 つのディレクティブをファイルに追加し.yarnrc.ymlます。

# yarnrc.yml

# disables yarn's plugnplay style and uses node_modules instead
nodeLinker: node-modules
# makes sure the node_modules are not hoisted to the (monorepo) project root
nmHoistingLimits: "dependencies"

上記の 2 つのディレクティブは、次のようにyarnrc 構成ドキュメントで説明されています。

nmHoistingLimitsパッケージを持ち上げることができる最高点を定義します。ワークスペース (パッケージに依存するワークスペースを超えてパッケージをホイストしない)、依存関係 (パッケージは各ワークスペースの直接の依存関係を超えてホイストされない)、またはなし (デフォルトでは、パッケージは可能な限りホイストされます) のいずれかです。この設定は、installConfig.hoistingLimits フィールドを介してワークスペースごとにオーバーライドできます。

nodeLinker Node パッケージのインストールに使用するリンカーを定義します (node-modules プラグインを有効にするのに役立ちます)。pnp、node-modules のいずれかです。

于 2021-05-06T19:33:35.553 に答える