このページは PageTurner AI で翻訳されました(ベータ版)。プロジェクト公式の承認はありません。 エラーを見つけましたか? 問題を報告 →
設定
Lernaの設定はlerna.jsonとnx.jsonの2ファイルに分かれています。
Lerna.json
npmClient
npm以外のパッケージマネージャー(yarnやpnpmなど)を使用する場合、この値を設定することが重要です。これによりLernaは設定やパッケージ解決時の内部ロジックを調整できます。特にpnpmの場合は、ワークスペース設定を定義する別個のpnpm-workspaces.yamlファイルを使用するため、この設定が必須となります。
packages
デフォルトではLernaは選択したパッケージマネージャーのworkspaces設定を再利用します。Lernaが操作するパッケージのサブセットを明示的に指定したい場合は、packagesプロパティを使用してpackage.jsonファイルの検索場所を指定できます。
{
"packages": ["packages/*"]
}
version
Lernaにはパッケージ公開の2つのモードがあります:fixed(固定)モードとindependent(独立)モードです。fixedモードでは影響を受ける全パッケージが同じバージョンで公開されます。最後に公開されたバージョンはlerna.jsonに以下のように記録されます:
{
"version": "1.2.0"
}
independentモードでは各パッケージが個別にバージョン管理され、lerna.jsonは以下のようになります:
{
"version": "independent"
}
詳細はバージョン管理と公開ドキュメントをご覧ください。
commands
lerna.jsonファイルでは各コマンドのオプションを以下のように設定できます:
{
"command": {
"version": {
"allowBranch": "main",
"conventionalCommits": true
}
}
}
利用可能なオプションはAPIドキュメントで確認してください。
Nx.json
注記: "{projectRoot}" と "{workspaceRoot}" はタスクランナーがサポートする特殊構文です。コマンド実行時に内部で適切に展開されるため、固定パスで置き換えるべきではありません。これらを置換すると設定の柔軟性が損なわれます。
{
"namedInputs": {
"default": ["{projectRoot}/**/*"],
"prod": ["!{projectRoot}/**/*.spec.tsx"]
},
"targetDefaults": {
"build": {
"dependsOn": ["prebuild", "^build"],
"inputs": ["prod", "^prod"],
"outputs": ["{projectRoot}/dist"],
"cache": true
},
"test": {
"inputs": ["default", "^prod", "{workspaceRoot}/jest.config.ts"],
"cache": true
}
}
}
ターゲットデフォルト
ターゲットはnpmスクリプト名を指します。リポジトリ内の各プロジェクトのビルドスクリプトなどに関連付けるメタデータをtargetDefaultsセクションで追加できます。
cache
trueに設定すると、スクリプト実行結果をキャッシュするようNxに指示します。ほとんどのリポジトリでは、長時間実行されないタスク(例:serve以外)はキャッシュ可能であるべきです。
依存関係(dependsOn)
ターゲットは他のターゲットに依存できます。プロジェクトをビルドする前に依存関係をビルドする必要があるのは一般的なシナリオです。dependsOnプロパティで個々のターゲットの依存関係を定義できます。
"dependsOn": [ "prebuild", "^build"]は、各ビルドスクリプトが実行前に同一プロジェクトのprebuildスクリプトと全依存関係のbuildスクリプトを必要とすることをNxに伝えます。
入力と名前付き入力
inputs配列は、特定のスクリプト実行がキャッシュヒットと見なすかどうかを判断する基準をNxに伝えます。入力には3種類あります:
ファイルセット
例:
-
{projectRoot}/**.*.ts -
{fileset: "{projectRoot}/**/*.ts"}と同等 -
{workspaceRoot}/jest.config.ts -
{fileset: "{workspaceRoot}/jest.config.ts}と同等
ランタイム入力
例:
{runtime: "node -v"}
結果値はハッシュ化されるため表示されることはありません
環境変数
例:
{env: "MY_ENV_VAR"}
結果値はハッシュ化されるため表示されることはありません
名前付き入力(Named Inputs)
例:
-
inputs: ["prod"] -
inputs: [{input: "prod", projects: "self"}]と同等
同じグロブパターンが複数箇所で出現す ることはよくあります(例:すべてのプロジェクトでprodファイルセットがspecファイルを除外する場合)。これらを同期させ続けるのはエラーが発生しやすいため、名前付き入力を定義し、それらを参照することを推奨します。
^ 記号の使用
例:
-
inputs: ["^prod"] -
inputs: [{input: "prod", projects: "dependencies"}]と同等
dependsOnと同様に、"^"記号は「依存関係」を意味します。この概念は非常に重要なので、例を用いて説明します。
"test": {
"inputs": [ "default", "^prod" ]
}
上記の設定は、テストターゲットが対象プロジェクトのすべてのソースファイルと、その依存関係のprodソース(テスト以外のソース)のみに依存することを意味します。言い換えると、テストソースをプライベートとして扱います。remixappプロジェクトがheaderライブラリに 依存している場合、headerのテストを変更してもremixappのテストターゲットには影響しません。
出力(outputs)
"outputs": ["{projectRoot}/dist"]は、ビルドスクリプトがファイル成果物を作成する場所をNxに伝えます。この値は実際にはデフォルト値であるため、省略可能です。"outputs": []は、テストターゲットがディスク上に成果物を作成しないことを示します。出力は複数指定可能で、グロブパターンや個別ファイルも出力として使用できます。
通常この設定は不要です。Nxには上記の設定を実装する合理的なデフォルト値が用意されています。
プロジェクト固有の設定
多くのワークスペースでは、プロジェクトが類似しているためnx.jsonにすべてのNx設定が含まれます。しかしプロジェクト固有の設定が必要な場合があり、その場合はプロジェクトのpackage.jsonファイルに配置されます。
{
"name": "parent",
"scripts": {
"build": "...",
"test": "..."
},
"dependencies": {...},
"nx": {
"namedInputs": {
"prod": [
"!{projectRoot}/**/*.test.tsx",
"{workspaceRoot}/configs/webpack.conf.js"
]
},
"targets": {
"build": {
"dependsOn": [
"^build"
],
"inputs": [
"prod",
"^prod"
],
"outputs": [
"{workspaceRoot}/dist/parent"
]
}
}
"implicitDependencies": ["projecta", "!projectb"]
}
}
nx.jsonで定義されたnamedInputsとtargetDefaultsは単なるデフォルト設定です。この設定をすべてのプロジェクトのpackage.jsonファイルにコピーしても結果は同じになります。
つまり、各プロジェクトには名前付き入力のセットがあり、{...namedInputsFromNxJson, ...namedInputsFromProjectsPackageJson}として定義されます。各ターゲット/スクリプトのdependsOnはdependsOnFromProjectsPackageJson || dependsOnFromNxJsonとして定義されます。inputsとoutputsについても同様です。
入力と名前付き入力
特定のターゲットに対してinputsを定義すると、nx.jsonで定義されたそのターゲット名に対する入力セットが置き換えられます。擬似コードではinputs = packageJson.targets.build.inputs || nxJson.targetDefaults.build.inputsとなります。
名前付き入力も定義・再定義できます。これにより主要なユースケースが可能になります。たとえばnx.jsonで(すべてのプロジェクトに適用される)以下のような定義が可能です:
"test": {
"inputs": [
"default",
"^prod"
]
}
これによりプロジェクトはtestターゲットの入力を再定義することなく、自身のprodファイルセットを定義できます。
{
"name": "parent",
"scripts": {
"build": "...",
"test": "..."
},
"dependencies": {...},
"nx": {
"namedInputs": {
"prod": [
"!{projectRoot}/**/*.test.js",
"{workspacRoot}/jest.config.js"
]
}
}
}
この場合Nxは各プロジェクトに適切なprod入力を使用します。
依存関係(dependsOn)
特定のターゲットに対してdependsOnを定義すると、nx.jsonで定義されたそのターゲット名のdependsOnが置き換えられます。擬似コードではdependsOn = packageJson.targets.build.dependsOn || nxJson.targetDefaults.build.dependsOnとなります。
出力(outputs)
特定のターゲットに対して outputs を定義すると、nx.json で定義された同じターゲット名の outputs が置き換えられます。
擬似コードで表すと outputs = packageJson.targets.build.outputs || nxJson.targetDefaults.build.outputs となります。
implicitDependencies
"implicitDependencies": ["projecta", "!projectb"] という記述は、親プロジェクトが package.json に明示的な依存関係がなくても projecta に依存していることを Nx に伝えます。Nx はこのような依存関係を明示的な依存関係と同様に扱います。また、projectb への明示的な依存関係があっても無視すべきことも同時に指示します。
追加の設定
タスク実行とキャッシュに関する追加の設定方法については、関連する Nx ドキュメントを参照してください。