このページは PageTurner AI で翻訳されました(ベータ版)。プロジェクト公式の承認はありません。 エラーを見つけましたか? 問題を報告 →
公開ファイルの設定
パッケージをレジストリに公開する際、デフォ ルトではパッケージのソースディレクトリ内のすべてが公開されます。これは常に最適とは限りません。なぜなら、テストや設定ファイルなど開発専用のファイルが含まれることが多く、またモノレポ環境ではソースファイルをコンパイルして一元化された場所に出力する構成が一般的だからです。
Lernaでは、適切なファイルのみがパッケージ化されてレジストリに公開されるよう、複数の設定オプションを提供しています。
"files"と.gitignore
Lernaは常にnpmのツールチェーンを使用して公開を行い、ファイルの包含/除外にはいくつかの組み込み方法があります。公開パッケージに含めるファイルを設定する最も簡単な方法は、package.jsonの"files"プロパティと.gitignoreを活用することです。npmが公開ファイルを認識する方法の詳細については、npmドキュメントを参照してください。
--contents [レガシー -> --directoryの使用を推奨]
lerna publishを含む複数のコマンドは、汎用的な--contentsオプションをサポートしており、すべてのパッケージの公開ディレクトリを設定します。
このオプションは、モノレポ内のパッケージが単純で均一な出力構造を持つ場合にのみ有効です。--contentsに渡す引数は、公開対象の全パッケージ内に存在するサブディレクトリでなければなりません。詳細はlerna publishドキュメントを参照してください。
v7ではより強力で焦点を絞った--directoryオプションをlerna publishに導入しました。将来的に廃止される可能性がある--contentsオプションではなく、こちらを使用することを推奨します。
--directory
v7ではlerna publish向けに、より強力で焦点を絞った--directoryオプションを導入しました。
このオプションはlerna.jsonで設定可能で、以下の動的プレースホルダーをサポートします: {workspaceRoot}, {projectRoot}, {projectName}。これらの値は公開時に動的に置換されます。
これにより、パッケージ間で完全に同一ではないものの、スタイル的には統一された構成を簡潔に表現できるようになりました。
例として、すべてのパッケージをビルドし、その出力を一元化された場所に設定するモノレポ構成を考えます(Nxワークスペースなどで一般的):
packages/package-aはビルド出力をdist/packages/package-aに、packages/package-bはdist/packages/package-bに書き込みます。
パスは厳密には異なりますが、プレースホルダーを使用することで一貫したアプローチを表現できます:
{workspaceRoot}/dist/{projectRoot}
{workspaceRoot}はLernaリポジトリの絶対パスに置換され、{projectRoot}はpackage-aの場合packages/package-aに、package-bの場合packages/package-bにそれぞれ置換されます。
これをlerna.jsonで適用する方法は以下の通りです:
// lerna.json
{
"version": "1.0.0",
"command": {
"publish": {
"directory": "{workspaceRoot}/dist/{projectRoot}"
}
}
}
特定のパッケージで完全にカスタムな設定が必要な場合は、パッケージのpackage.json内で公開ディレクトリオプションを設定または上書きすることも可能です。
リポジトリルートのdist/packages/fooフォルダから公開するパッケージの設定例:
// packages/foo/package.json
{
"name": "foo",
"version": "1.0.0",
"lerna": {
"command": {
"publish": {
"directory": "../../dist/packages/foo"
}
}
}
}
カスタムディレクトリの場所には、 レジストリ公開用の有効なpackage.jsonが含まれていることを確認する必要があります。より複雑なカスタムロジックが必要な場合や、パッケージのソースから自動的にコピーしたい場合は、prepare、prepublishOnly、prepackなどのライフサイクルスクリプトを使用して作成できます。詳細は後述の「公開パッケージへの追加アセットの包含」セクションを参照してください。
標準のLernaパッケージのようにソースから公開するように特定のパッケージを設定するには、次のように公開設定をオーバーライドします:
// packages/foo/package.json
{
"name": "foo",
"version": "1.0.0",
"lerna": {
"command": {
"publish": {
"directory": "."
}
}
}
}
公開パッケージへの追加アセットの包含
Lernaはソースディレクトリからファイルを、公開用に指定されたディレクトリにコピーできます。directoryオプションと同様に、これはlerna.json(アセット定義内で動的プレースホルダーを使用可能)または特定のパッケージのpackage.jsonで設定できます。
どのファイルで設定する場合でも、"assets"プロパティはグロブパターン、または"from"と"to"プロパティを持つオブジェクトの配列である必要があります。"from"プロパティはソースディレクトリ内の特定のファイルまたはグロブパターン、"to"プロパティは公開ディレクトリ内のコピー先パスを指定します。
この例のパッケージは、出力をルートのdist/packages/barディレクトリにビルドします。Lernaは追加ファイルをこのディレクトリにコピーした後、dist/packages/barの内容をnpmに公開します。
// packages/bar/package.json
{
"name": "bar",
"version": "1.0.0",
"lerna": {
"command": {
"publish": {
"directory": "../../dist/packages/bar",
"assets": [
"README.md",
"package.json",
"docs/*.md",
{
"from": "static/images/*",
"to": "assets"
},
{
"from": "../../CONTRIBUTING.md",
"to": "./"
}
]
}
}
}
}
Lernaは上記の設定を読み取り、適切なファイルをdistディレクトリにコピーして、次のような構造を生成します:
dist/packages/bar
├── assets
│ ├── my-image-1.png
│ └── my-image-2.png
├── CONTRIBUTING.md
├── docs
│ ├── my-doc-1.md
│ └── my-doc-2.md
├── package.json
└── README.md