公開ファイルの設定
パッケージをレジストリに公開する場合、デフォルトではパッケージのソースディレクトリにあるすべてが公開されます。これは、テストや設定ファイルなど、開発にのみ関連するファイルが存在することが多く、また、ソースファイルを最初にコンパイルしてモノレポ設定で一元化された場所に出力する場合もあるため、常に最適とは限りません。
Lernaは、適切なファイルのみがパッケージ化され、レジストリに公開されるようにするための多くの設定オプションを提供します。
"files"
と.gitignore
Lernaは常にnpmのツールを使用して公開し、ファイルを含めたり除外したりするための組み込みの方法がいくつかあります。公開されたパッケージにどのファイルを含めるかを設定する最も簡単な方法は、package.json
の"files"プロパティと.gitignore
を使用することです。npmが公開用のファイルをどのように認識するかについての詳細は、npmドキュメントを参照してください。
--contents
[レガシー -> --directory
を推奨]
lerna publish
を含む多くのコマンドは、すべての pakketti の公開ディレクトリを設定する汎用的な--contents
オプションをサポートしています。
これは、モノレポ内のパッケージが単純で統一された出力構造を持っている場合にのみ公開に役立ちます。 --contents
に渡される引数は、公開されるすべてのパッケージ内に存在するサブディレクトリである必要があります。詳細は、lerna publishドキュメントを参照してください。
v7では、lerna publish
用に、より強力で焦点を絞った--directory
オプションを導入しました。将来的に非推奨になる可能性のある--contents
オプションよりも、こちらを優先してください。
--directory
v7では、lerna publish
用に、より強力で焦点を絞った--directory
オプションを導入しました。
これはlerna.json
で設定でき、次の動的プレースホルダーを使用できます:{workspaceRoot}
、{projectRoot}
、{projectName}
。これらの値は、公開時に動的に置き換えられます。
これは、スタイルの点で統一されているが、すべてのパッケージで文字通り同一ではない設定を、簡潔に表現できるようになったことを意味します。
たとえば、すべてのパッケージをビルドし、その出力が一元化された場所(Nxワークスペースで一般的なように)に設定されるモノレポがあるとします。
ビルド出力をdist/packages/package-a
に書き込むpackages/package-a
と、ビルド出力をdist/packages/package-b
に書き込む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
などのライフサイクルスクリプトを介してこれを作成するか、アセットとして設定することで、パッケージのソースから自動的にコピーさせることができます。詳細については、後述の**公開済みパッケージに追加アセットを含める**セクションを参照してください。
パッケージの1つを標準のlernaパッケージのように動作させ、ソースから公開したい場合は、公開設定を次のようにオーバーライドできます。
// packages/foo/package.json
{
"name": "foo",
"version": "1.0.0",
"lerna": {
"command": {
"publish": {
"directory": "."
}
}
}
}
公開済みパッケージに追加アセットを含める
Lernaは、ソースディレクトリから公開用に指定されたディレクトリにファイルをコピーできます。 directory
オプションと同様に、これはlerna.json
(アセット定義内で動的プレースホルダーを使用するなど)または特定のパッケージのpackage.json
内で設定できます。
どちらのファイルで設定されているかに関係なく、"assets"
プロパティは、globパターンまたは"from"
と"to"
プロパティを持つオブジェクトの配列である必要があります。 "from"
プロパティは、ソースディレクトリ内のファイルと一致する特定のファイルまたはglobパターンである必要があり、"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