モノリポジトリは、複数の関連する独立したプロジェクトを管理する単一のリポジトリです。個別のリポジトリと比較して、コードの再利用を可能にし、依存関係を簡素化し、チームのコラボレーションを促進することで開発を合理化します。
フロントエンドを個別に展開可能な小さな独立したユニットに分解する、フロントエンドの Web アプリケーション アーキテクチャ。マイクロフロントエンドは、他のコードベースから独立して作成およびデプロイできるため、柔軟性とスケーラビリティが向上します。
モジュール フェデレーション: これは Webpack の非常に強力な機能で、リモートの場所からのコードの動的な読み込みを可能にします。
Vite: これは、より最新のフロントエンド ビルド ツールであり、開発サーバーの高速起動と即時のホット モジュール交換を可能にし、最新の JavaScript 機能を強力にサポートし、プラグイン システムによってその機能を拡張します。 .
これらのパターンとツールを組み合わせることで、現代の Web 開発の要求を満たす、スケーラブルで保守性の高い、高性能のフロントエンド アプリケーションを構築できます。
これらのテクノロジーを組み合わせることで、大規模で複雑な Web アプリケーションを構築するための強力で柔軟なアーキテクチャを作成できます。主な影響の内訳は次のとおりです:
??この理論はこれくらいにして、実際のアクションを見てみましょう。 ??
Lerna や Nx などのモノリポジトリ管理ツールを選択します。 (このデモ プロジェクトでは Nx を選択しましょう)
mkdir my-monorepo cd my-monorepo
npm add --global nx@latest
npx create-nx-workspace@latest
nx g @nx/next:application host-app . . . nx g @nx/react:application my-remote-app . . . nx g @nx/react:library my-utils
npm i @originjs/vite-plugin-federation -D
import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; export default defineConfig({ plugins: [ react(), federation({ name: 'host-app', remoteApp: {}, // add Urls of your remote apps here shared: { react: { singleton: true, requiredVersion: '18.2.0', }, 'react-dom': { singleton: true, requiredVersion: '18.2.0', }, }, }), ], });
import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; export default defineConfig({ plugins: [ react(), name: 'my-remote-app', // unique app name for your remote module filename: 'remoteEntry.js', exposes: {}, // add the path of any components you want to expose to the host app shared: { react: { singleton: true, requiredVersion: '18.2.0', }, 'react-dom': { singleton: true, requiredVersion: '18.2.0', }, }, }), ], });
プロジェクトの構造は次のようになります
my-monorepo/ ├── apps/ │ ├── host-app/ │ │ ├── package.json │ │ ├── vite.config.js │ │ ├── src/ │ │ └── ... │ ├── my-utils/ │ │ ├── package.json │ │ ├── src/ │ │ └── ... │ └── my-remote-app/ │ ├── package.json │ ├── vite.config.js │ ├── src/ │ └── ... └── nx.json
?おめでとうございます。アプリの構成が完了しました。 ?
次に、コンポーネントを作成してホスト アプリに公開します。
コンポーネントを「AppComponent」として公開し、リモート名が「remoteApp」であると仮定します
const RemoteComponent = React.lazy(() => import('remoteApp/AppComponent')); <Suspense fallback={<>Loading....</>}> <RemoteComponent /> </Suspense>
*注: * ホストの vite.config.js ファイルにリモート URL を必ず追加してください。
大規模な e コマース プラットフォーム: 同じチームが商品ページ、チェックアウト プロセス、ユーザー アカウントに個別に取り組むことができます。
エンタープライズ アプリケーション: 共有プラットフォーム内のさまざまな部門が機能を管理できます。
さまざまなチームが個別のウィジェットやダッシュボードを作成および管理できます。
?ここで私のデモ プロジェクト コードをチェックしてください ??: Monorepo プロジェクト
Monorepos、マイクロフロントエンド、モジュールフェデレーション、Vite は、上記すべてのテクノロジーの強みを利用して、組織が現代の開発とビジネスのニーズを満たす、スケーラブルで保守性の高い高性能の Web アプリケーションを構築するのに役立ちます。
Nx ドキュメント
Vite ドキュメント
Webpack モジュール フェデレーション
マイクロフロントエンドアーキテクチャ
ご質問がある場合や、プロジェクトにこの設定を実装する際にサポートが必要な場合はお気軽にお問い合わせください。素晴らしいものを作りましょう! ?
以上がモジュールフェデレーション Vite を使用した Monorepo とマイクロフロントエンドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。