LernaでGatsbyテーマプロジェクトを設定する方法を学ぶ:このガイドでは、モノリポジトリとは何か、Yarnワークスペースの代わりにNPMを使用してLERNAでそれを管理する方法を理解するのに役立ちます。
Index
- Lernaとは何ですか、なぜ試してみる価値がありますか?
- シェルからNPMを使用してLernaを設定する
- シェルを使用して足場フォルダとファイル
- Lernaを使用する
- あなたのアプローチを選択してくださ
- Lerna bootstrapですべてをオーケストレーション
- コマンドとスクリプトの実行
- Update Wizard
Lernaとは何ですか、なぜそれは試してみる価値がありますか?
私はJason Lengstorf(@jlengstorf)のGatsbyテーマオーサリングコースに従うようになり、すぐに私は’Yarn Workspaces’について何も知らないことに気付きました。 これは、mono-repoと呼ばれるものを管理するためのかなりの方法です: 複数のプロジェクトが内部にあり、依存関係を共有できるリポジトリ。
doppelmutzi.github.io:
このようなプロジェクトは、ワークスペースまたはパッケージと呼ばれます。 対照的に、一つのプロジェクトだけを収容する各リポジトリで複数のリポジトリを使用することは、マルチレポアプローチと呼ばれています。
mono-repoアプローチで私を驚かせたことの一つは、私のパッケージ/ワークスペースが同じnode_modules
依存関係をローカルで共有できることでした。 これは私に時間と物理的なスペースを節約します。
lernaとyarnワークスペースは、npmや他のレジストリに公開することを強制することなく、単一のレポでライブラリやアプリを構築する機能を提供します。 これらの技術の背後にある美しさは、パッケージを分析することによってパッケージの依存関係を見つけることができるということです。各プロジェクトのルートフォルダにあるjsonファイル。 したがって、これらのツールは、手動でシンボリックリンクを作成したり、”低レベル”npm linkを直接使用したりすることを時代遅れにします。
今、あなたはすでにyarn workspaces
を使用している場合でも、私はそれがvantagesのシリーズを提供するので、試してみる価値がLernaだと思います。 あなたはYarnワークスペースでLernaを使用することができます:
1つのlernaコマンドを使用すると、すべてのパッケージまたは特定のパッケージを反復処理し、各パッケージに対して一連の操作(linting、testing、buildingなど)を実行できます。 これにより、依存関係管理プロセスを引き継ぐyarnワークスペースを補完します。
だから最後に私はLernaを学ぶことにしました-早口言葉で申し訳ありませんが、私は糸に切り替えたくありませんでした(私はnpmに慣れているので)。 ここで私はそれを動作させることができた方法です:
シェルからNPMでLernaを設定する
プロジェクトのディレクトリを作成し、次のコマンドで入力します:
mkdir try-lernacd try-lerna
Lernaをグローバルにインストールするか(npm i -g lerna
)、npxと一緒に使用することができます。
-
イット-レルナ
npx lerna init --independent
これは:
-
init
gitリポジトリ package.json
- を作成する
lerna.json
- を作成する
packages
フォルダを作成します(ここでワークスペースを配置できます)。
パッケージは、lernaがワークスペースを呼び出す方法です。
すべてのパッケージをルートフォルダに入れてから、一致するように配列を変更することができます(”yarn workspaces”アプローチのように)。
私のレルナ。jsonファイルには、stream: true
(lernaでdevelopを実行したときにgatsbyの出力を確認するため)とhoist: true
(node_modulesをコマンドlerna add
でもホイストするため)があります。):
{ "packages":, "version":"independent", "stream":true, "command":{ "bootstrap":{ "hoist":true } }}
これは手動で追加するか、次の単純なシェルコマンドを使用できます:
echo "{\r\t\"packages\":,\r\t\"version\":\"independent\",\r\t\"stream\":true,\r\t\"command\":{\r\t\t\"bootstrap\":{\r\t\t\t\"hoist\":true\r\t\t}\r\t}\r}" > lerna.json
シェル
を使用した足場フォルダとファイルこのセクションは、導入にリンクされているJason Lengstorfのコースからの最初のレッスンに続いて手で行うことができます。
私は、シェルからのいくつかのコマンドでそれらを達成するために、すべての基本的な通路を収集するだけです。
私のアプローチを使用したい場合は、”NAME”をテーマの名前に置き換えてから、このコマンドをコピーして貼り付けることを忘れないでください:
mkdir -p packages/{gatsby-theme-NAME,site}
touch packages/{gatsby-theme-NAME,site}/{index.js,package.json}
echo "//loop" >> packages/{gatsby-theme-NAME,site}/index.js
パッケージの初期コンテンツ。サイトフォルダのjson:
echo "{\r\t\"private\":true,\r\t\"name\":\"site\",\r\t\"version\":\"1.0.0\",\r\t\"license\":\"MIT\",\r\t\"scripts\":{\r\t\t\"builds\":\"gatsby build\",\r\t\t\"develop\":\"gatsby develop\",\r\t\t\"clean\":\"gaysby clean\"\r\t}\r}" >> packages/site/package.json
パッケージ。フォルダのテーマにjson(名前を再度置き換え、YOUR_NPM_USERも挿入します):
echo "{\r\t\"name\": \"@YOUR_NPM_USER/gatsby-theme-NAME\",\r\t\"version\": \"1.0.1\",\r\t\"license\": \"MIT\",\r\t\"main\": \"index.js\",\r\t\"scripts\": {\r\t\t\"builds\": \"gatsby build\",\r\t\t\"develop\": \"gatsby develop\",\r\t\t\"clean\": \"gaysby clean\"\r\t}\r}" >> packages/gatsby-theme-NAME/package.json
結果は次のとおりです:
├── packages│ ├── site│ └── gatsby-theme-NAME├── .gitignore├── package.json└── lerna.json
PS:私はあなたが.gitignore
を作成し、すぐにnode_modules
を追加することをお勧めします:
echo "node_modules" > .gitignore
Lerna
の使用Lernaの問題の1つは、1つのコマンドでパッケージごとに複数の依存関係をインストールできないことです(yarn workspace name_workspace add package1 package2 etc
のように)。 次のように、1つずつ実行する必要があります(グローバルにインストールしなかった場合は、すべてのコマンドの前にnpx
を付ける必要があります):
lerna add gatsby --scope site
lerna add react --scope site
lerna add react-dom --scope site
ここで--scope site
は、パッケージ”site”にのみインストールするようにLernaに指示するために使用されます。
しかし、1つのコマンドだけですべてのパッケージに依存関係をインストールすることができます。gatsby
としましょう:
lerna add gatsby
このコマンドは:
- すべてのパッケージにGatsbyをインストールします(この場合はサイトとテーマパッケージのために)。 Lernaで
hoist
を有効にした場合は - 。jsonそれはあなたのルートにnode_modulesフォルダを作成します(’Lerna Bootstrap forward’を参照):
あなたのアプローチを選択してください
このアプローチが好きなら、パッケージにすべての共通の依存関係(react
、react-dom
)をインストールし続けることができます。 1つのパッケージにのみ依存関係をインストールする必要がある場合は、--scope name_of_the_package
を使用します(パッケージで指定された名前であることを覚えておいてくださjsonはフォルダの名前ではありません)。
それぞれのパッケージに必要なすべての依存関係をインストールすることでnpmを使用することもできます。 しかし、この方法では、それぞれのフォルダごとにnode_modules依存関係がインストールされることを覚えておいてください。 これはきれいにし、その後掲揚することができます。 このオプションは有効ですが、それはあなたに多くの時間がかかります。
どのオプションを選択しても、サイトパッケージの依存関係としてローカルテーマパッケージを追加/リンクすることを忘れないでください(設定した名前package.json
):
lerna add @YOUR_NPM_USER/gatsby-theme-NAME --scope=site
Lerna bootstrap
ですべてをオーケストレーションして、最終的には安全に行うことができます:
lerna bootstrap
このコマンドは、特にパッケージが既にある場合には本当に便利です。jsonはそれぞれの依存関係で満たされています。
hoist: true
オプションを使用して(lerna.json
上)、ルートにある共有node_modules
フォルダを配置し、それぞれのpackage.json
ローカル依存関係をリンクします。
私は本当に好きです–ホイスト機能これはnode_modulesへの重複依存を避けるプロセスなので、物理的なスペースとインストール時間を節約します。
何らかの理由であなたが最初に何かをきれいにしたい場合は、あなたが行うことができます:
lerna clean && lerna link && lerna bootstrap
コマンドとスクリプトの実行
スクリプトを実行するには(package.json
に配置されている)、ターゲットパッケージを指定する(または指定しない)必要があります:
lerna run develop --scope Package_name
Lernaはまた、ルートからすべてのパッケージに任意のコマンドを実行することができます(ダッシュを使用します)。 例えば:
lerna exec -- rm -rf node_modules
これにより、すべてのパッケージフォルダのノードモジュールが削除されます。
Update Wizard
将来、パッケージを更新する必要がある場合は、update-wizardを使用できます:
npm install --save-dev lerna-update-wizard
次に、このコマンドのみを実行する必要があり、ウィザードが役立ちます:
lernaupdate