Table of Contents
[]のデザインバリエーションの作成と管理]Nx[は、一意でスケーラブルでマルチエクスペリエンスアプリケーションを構築するチームのための基本的な機能です。 A / Bのテスト、機能フラグ、ブランドテーマ、またはユーザーパーソナライズされたインターフェイスのどちらでも、コードの重複を回避し、一貫性を維持し、ビルド時間を高速に保つための構造化されたアプローチが必要です。 Nxは、モノプレックスとして、高度な操作方法として、Nxは、いくつかの効果的な設計方法と実績のあるガイドを効果的に提供し、Nxは、最も効果的な設計方法を提供します。
Nxのデザインバリエーションの理解
設計変数は、UIコンポーネント、スタイルセット、またはレイアウトの複数のバージョンを参照して、動的に切り替えたり、ビルド時に切り替えることができる。典型的なNxワークスペースでは、複数のアプリケーションで使用されている共有UIライブラリがあります。 ソリッドバリアント戦略がなければ、アプリ間でコードを複製したり、脆弱になる複雑な条件付きロジックを導入したりするリスクもあります。
設計変数は、以下のようなユースケースを可能にします。
- []A/Bテスト[]] – 異なるボタンスタイルやレイアウトをユーザのコホーツに提供します。
- []ホワイトラベル] - 各クライアントはカスタムカラースキームとロゴを取得します。
- [] 機能プレビュー - 新規設計をユーザーの割合にロールアウトします。
- [] プラットフォーム固有の UI[ – モバイル対デスクトップ、またはライト/ダークモード。
Nxのアーキテクチャーは、プロジェクト境界、依存グラフ、および影響を受けたコマンドで、コードベースを破ったり、膨らむことなく、これらのシナリオを管理するために適しています。
デザインバリエーションの作り方
1. 環境ファイルとビルドタイム変数の使用
一番シンプルで最も信頼できる方法は、環境ファイルからバリアント情報の設計を注入することです。Nxは[]]ファイルとオブジェクトを使用して環境固有の構成をサポートしています。
例えば、次のことがあるかもしれません:
- [] – を含む
- [ – を含む
それから、コンポーネントやCSSで、参照(またはNx互換)プレフィックス。このアプローチはきれいで、フロントエンドフレームワークで動作します。スタイルのバリアントでは、テーマスタイルシートを条件的にインポートできます。
if (theme === 'corporate') {
import('./corporate-theme.scss');
} else {
import('./startup-theme.scss');
}
Nxのビルドシステムはツリーシェーク未使用スタイルで、必要なバリアントコードのみがバンドルされます。この方法は、ビルド時にバリアントが知られ、ランタイムで切り替える必要はありません。
2. スタイルとCSSのカスタムプロパティを上書き
実行時間スイッチ可能なバリアントの場合、CSS カスタムプロパティ(CSS変数)は、強力で低コストのソリューションです。 共有スタイルシートにベース変数のセットを定義し、バリアントごとにそれらをオーバーライドします。 Nxワークスペースでは、テーマオブジェクト(例えば)をエクスポートするライブラリ(]]])、:13]]]を作成できます。
アプリケーションのエントリ ポイントで適切なテーマをインポートすることで、Nx のビルドプロセスを統合します。React や Angular の場合、コンテキスト/provider を使用して、テーマクラスを root 要素に動的に適用することができます。
.theme-corporate {
--primary-color: #0055a5;
--secondary-color: #ff6600;
}
.theme-startup {
--primary-color: #6c63ff;
--secondary-color: #ff6584;
}
コンポーネントでは、を参照します。このアプローチは軽量で美しいで動作します。]戦略を使用する場合は、複数のテーマをサポートするようにします。
より複雑なCSS-in-JSの設定(例えば、スタイル化されたコンポーネントや感情)のために、テーマオブジェクトを作成し、ReactコンテキストやVueの提供/注入を介してそれを渡す。 Nxのライブラリ境界は、重複することなくアプリ間でこのテーマロジックを共有することができます。
3. コンポーネントのバリエーションは、プロップとスロットを介して
設計の違いが、レイアウトのアレンジや追加の要素などの色や間隔を超えて行くとき、leveraging コンポーネントのバリアント]] のプロップ(React)またはスロット(Vue)を介して有効です。例えば、[ コンポーネントは props:
function Button({ variant, children }) {
const className = variant === 'primary' ? styles.primary : styles.secondary;
return <button className={className}>{children}</button>;
}
Nxは、共有UIライブラリでそのようなコンポーネントを保持することを奨励します。 バリアントが多数なる場合は、variant Registry] パターンを使用して検討します。 JSONオブジェクトのバリアント設定を保存し、コンポーネントのpropsにそれらをマップします。 この方法は、きれいでテスト可能です。
より大きな違いのために、 composition は条件よりも優れています。 別のサブコンポーネント(例えば、])、 [)を作成して、共通のベースをシェアします。 ベースライブラリが共有され、必要に応じてのみ変更されるように、Nxの依存グラフを使用してください。
4. 特徴 旗およびランタイムトグル
サーバー側またはユーザーのサブセットのために、機能フラグサービス()のLaunchDarklyまたは]の[[FLT:]のような)をNxで統合する必要がある設計 variantは、堅牢なソリューションです。 フラグプロバイダを抽象化する専用のライブラリを作成します。 各アプリケーションは、このライブラリをインポートし、異なる設計をレンダリングするために異なる設計をチェックします。
単純な React のホックを使用して例:
import { useFeatureFlag } from '@myorg/feature-flags';
function HomePage() {
const newLayout = useFeatureFlag('new-layout');
return newLayout ? <NewLayout /> : <OldLayout />;
}
Nx のプロジェクト構成により、開発とテスト中にフラグをモックできます。異なるフラグのシナリオで別の Nx ターゲットを作成できます。
"targets": {
"serve-with-flags": { ... },
"test-flags": { ... }
}
これは、アプリ全体を再デプロイすることなく、あなたの変形ロジックを分離し、簡単に切り替えるのを保ちます。
設計変数を効果的に管理して下さい
一貫したフォルダー構造でバリアントを整理
ワークスペースを、バリアント関連ファイルをグループ化することで整頓します。例えば:
libs/
ui/
button/
src/
lib/
variants/
primary/
secondary/
ghost/
index.ts
各 variant フォルダーには、独自のスタイル、テスト、ストーリーが含まれている。このアプローチは、変更された variant だけに を実行するのが簡単です。 Nx の タグ (例: ]) は、 "primary" を使用してアプリが "ghost" の内部に依存して誤って強制できないように、境界線を強制することができます。
変化のためのNxの影響を受けたコマンドのレバレッジ
1つのバリアントを変更した場合、すべてのアプリを再構築またはテストしたくない。 Nxの[、、および[]は、依存関係グラフに基づいて、どのプロジェクトが影響するかを自動的に検出する。 これは、多くの設計バリアントを持つモノレポで特に強力です。そのパイプラインを変更したバリアントのみ。
例えば、「プライマリー」ボタンのバリアントだけを更新すれば、Nxは、そのバリアントに依存するライブラリやアプリケーション向けにビルドをスケジュールし、他の非接触状態のままにします。これにより、重要なCI時間を節約できます。
名前 品種 一貫して文書の違い
、、[、または、などの標準命名規則は、予測可能なバリアントを作ります。 目的、視覚的差、各使用時に説明するために、各バリアントフォルダ内の[[]を使用して、。 共有設計トークンについては、単一の真理のソースを維持します。 ライブラリ - すべての参照で。
多彩なテストを自動化
Nxのテストジェネレータを使用して、各バリアントのユニットテストを作成します。 視覚的な回帰テストツールをChronicやPercyなどの統合します。 CIパイプラインでは、変更されたバリアントだけのためにビジュアルテストを実行するには、を使用します。 ]]の構成は、さまざまなバリ間でのパフォーマンスを比較するために、Lighthouse CI]を。
例えば、バリアントテストの別のターゲットを追加します。
"test:variant": {
"executor": "@nrwl/jest:jest",
"options": {
"jestConfig": "libs/ui/button/variants/primary/jest.config.ts"
}
}
その後、シェルスクリプトまたはNxランコマンドですべてのバリアントをテストします。
デザイン品種の管理のためのベストプラクティス
- []色、間隔、タイポグラフィの共有デザイントークンライブラリをメインに。バリアントは、符号化された値ではなく、トークンをオーバーライドします。
- [] Nxのプロジェクトグラフ[を使用して、バリアントとアプリ間の依存関係を視覚化します。 円の依存関係を避けます。
- []Version control]] は、 特定のバリアントをロールバックする必要がある場合、Git()でタグを使用します。
- [ ドキュメントのバリアントのライフサイクル – 変形が非推奨される場合? アクティブにどのくらいの時間がありますか? Nxジェネレーターでクリーンアップを自動化します(例: ])。
- []コアビジネスコード[]から、多様体ロジックをキープします。高順序のコンポーネント、ミキサー、またはデコレータを使用して、懸念を分離します。
- []右粒度[を選択 - ないすべてのマイナースタイル変更は、変種を必要とします。 有意な発色(クライアントブランディング、実験的機能)のためのバリデーションを予約します。
コンテンツ
設計のバリアントは、現代のWeb開発において現実的であり、Nxはビルド速度やコード品質を犠牲にすることなく、それらを管理するためのツーリングを提供します。 ビルドタイム環境ファイル、ランタイムCSSカスタムプロパティ、コンポーネントのプロップ、または機能フラグを選ぶかどうかにかかわらず、キーは、Nxのモノレポ機能を維持し、影響を受けるコマンド、プロジェクト境界、および依存のグラフ。 これらの方法とベストプラクティスを採用することで、拡張可能なアプリケーションを、さまざまなCSS[F]を適応させるようにすることができます。 [Fark[F]と[Fark]:[F] [F] と[Fark[F] と[F] 異なる機能] を変換します。