この記事は、Vue3 コンポーネント ライブラリを 0 から構築することに関する一連の記事の 2 番目です。この記事では、pnpm を使用して単純な Monorepo プロジェクトを構築し、パッケージの関連付けとテストを完了する方法を説明します。
モノレポとは
実際、これは非常に単純です。つまり、コード ベースには多くのプロジェクトが含まれており、これらのプロジェクトは関連していますが、論理的には独立しており、別の人やチームが保守できます。
pnpmを使用する理由
pnpm は、特に Monorepo プロジェクトの場合、パッケージ管理に非常に便利です。なぜなら、開発しようとしているコンポーネント ライブラリには複数のパッケージ (パッケージ) が存在する可能性があり、これらのパッケージはローカルでテストする必要があり、たまたま pnpm がそれを自然にサポートしているからです。実際、yarn や lerna などの他のパッケージ管理ツールでも実行できますが、比較的面倒です。そして、pnpm は現在非常に成熟しており、Vant や ElementUI などのスター コンポーネント ライブラリが pnpm を使用しているため、このプロジェクトでもパッケージ管理ツールとして pnpm を使用しています。
pnpmの使用
インストール
npm install pnpm -g
プロジェクトを初期化する
プロジェクトのルートディレクトリで実行すると、ファイルがpnpm init
自動的に生成されますpackage.json
{
"name": "easyest",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
パッケージ管理
さまざまなパッケージを後で保存するために、新しいパッケージ フォルダーを作成します。pnpm init
package と b パッケージがある場合、packages の下に a と b を作成し (ここでは pnpm のローカル参照をテストするために使用されます)、それぞれ a ディレクトリと b ディレクトリで初期化を実行します。ここでは、パッケージ名を変更する必要があります。ここで名前を変更します。
Cheng @easyest/a は、パッケージが easyest 組織に属していることを示します。したがって、公開する前に npm にログインして新しい組織を作成することを忘れないでください (たとえば、最も簡単です)。例えばこの時のaのpackage.json
{
"name": "@easyest/a",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
ここで、パッケージはツールキットを表し、package.json の主な属性はパッケージのエントリ (つまり、index.js) です。
そこで、ディレクトリに新しいindex.jsを作成します。
export default () => {
console.log("我是@easyest/a包");
};
次に、参照用に b パッケージの下に新しいindex.jsを作成します。
import sayHello from "@easyest/a";
sayHello();
a パッケージを使用したので、最初に a をインストールして、 B ディレクトリに実行する必要があります。2pnpm add @easyest/a
つのパッケージを関連付けていないため、明らかにこれによりエラーが発生します。関連付け方法は実際には非常に簡単です。
ルート ディレクトリ内の新しい pnpm ワークスペース ファイル pnpm-workspace.yaml はパッケージを関連付けることができます
packages:
- 'packages/**'
これは、パッケージ ディレクトリ内のすべてのパッケージが関連付けられてから実行されることを意味します。pnpm add @easyest/a
ここでは import es6 構文を使用しているため、 A と B にpackage.json
フィールドを追加する必要"type": "module"
があることに注意してください。a は b のノードモジュールに直接表示されることがわかります。ディレクトリ ソフトリンク。同時に、 b の package.json にはより多くの依存関係フィールドがあり"@easyest/a": "workspace:^1.0.0"
、ローカル パッケージに関連付けられていることを意味します@easyest/a
。
このとき、 b ディレクトリで実行します。
node index.js
この時点で、ローカル パッケージの関連付けが完了しました。今後、パッケージをテストするのがより便利になります。