1. ホーム
  2. ノード

LERNAの開発プロセス(ピット内とピット外)

2022-02-28 20:47:14

lerna共通apiの概要です。

<テーブル レルナブートストラップ 依存関係のインストール レルナクリーン 各パッケージから node_modules を削除します。 レルナ・イニット lernaライブラリの新規作成 レルナリスト パッケージ一覧を表示する レルナ変更 最後の relase タグ以降に変更されたパッケージを、リストを通してオプションで表示します。 ラーナ差分 最後の relase タグ以降に変更されたパッケージの diff を表示するには、git diff を実行します。 レルナエグゼ

各パッケージディレクトリで任意のコマンドを実行する

レルナラン 各パッケージのpackage.jsonにあるスクリプトコマンドを実行する

レルナアド

各パッケージの依存関係として、パッケージのバージョンを追加する レルナ輸入 パッケージの紹介 レルナリンク 相互参照可能なライブラリへのリンク ラーナクリエイト 新規パッケージの作成 レーナパブリッシュ パブリッシュ

注: lerna [command] -h を使用すると、1つのコマンドの使用法とパラメータを見つけることができます。

lernaブートストラップ 

このコマンドを実行すると、次の4つのことが行われます。

  1. 各パッケージの依存関係をインストールする
  2. 相互に依存するライブラリを特定のディレクトリにリンクする
  3. npm run prepublishを実行します。
  4. npm run prepareの実行

パラメータは以下の通りです。

<テーブル -- --production --no-optional npmクライアントのパラメータを指定する

--ホイスト

ルートディレクトリの node_modules に依存関係をインストールします。

--ignore

無視されるパッケージ --ignore test-* test で始まる名前のパッケージを無視する。 --スコープ  指定されたパッケージ パラメータの意味はパッケージ名です

--ignore-scripts

prepare などの宣言的なサイクルスクリプトコマンドを実行しない。

--registry <url>

レジストリを指定する

--npm-client

インストールするnpmクライアントを指定します lerna bootstrap --npm-client=yarn

--use-workspace

yarn workspaceを使用する、使用しない

--no-ci

npm ciのデフォルトの呼び出しは、npm installを置き換えるもので、オプションを使用して設定を変更します。 npm ci  と同様です。  npm-install  が、テストベッド、継続的インテグレーション、デプロイメントなどの自動化された環境での使用を目的としています。 --スキップ-ギット gitコミットやタグは作成されません -skip-npm npmにパッケージを公開しない --カナリア タグを付けずに、各コミットを独立して投稿するために使用できます。 lerna publish --canary

注意:npm ci は node_modules フォルダを削除し、package-lock.json ファイルを必要とします。

---------- ---------- ---------- ---------- ----------

lerna list 現在のlernaライブラリに含まれるパッケージの一覧を表示します。

<テーブル

--json

jsonで表示する

--全て

private を含むパッケージを表示します。

--長さ

拡張機能の詳細情報を表示する

---------- ---------- ----------

LERNA変更

最後の relase タグ以降に変更されたパッケージを、リストを通してオプションで表示します。

---------- ---------- ---------- ---------- ----------

ラーナ差分

最後の relase タグ以降に変更されたパッケージの diff を表示するには、git diff を実行します。

---------- ---------- ---------- ---------- ----------

レルナエグゼ

各パッケージディレクトリにある任意のコマンドを実行する

<テーブル

-通貨

デフォルトのコマンドは並列に実行されますが、並列度を1に設定することができます(グローバルパラメータ) lerna exec --concurrency 1 -- ls -la

--スコープ

同梱パッケージの設定 lerna exec --scope my-component -- ls -la

--ストリーム

クロスパラレル出力結果 lerna exec --stream -- babel src -d lib

--並列

 無制限の並行処理でコマンドを実行し、プリフィックス付き出力をストリーミングします。

--保釈なし

指定されたパッケージで非ゼロの exit が発生しても、コマンドの実行を継続します。

lerna runオプションは、lerna execと同じです。

package.jsonに記述されたスクリプトコマンドをパッケージごとに実行する。

---------- ---------- ---------- ---------- ----------

レルナ・イニッツ  

lernaライブラリを新規に作成、またはlernaのバージョンを更新します。

デフォルトでは、固定モードとスタンドアロンモードの2つの管理モードがあります。

  • 固定モード --正確

スキーマを固定し、lerna.jsonのバージョニングでバージョン管理。を実行すると lerna publish コマンドを使用すると、前回のリリース以降に変更されたモジュールが1つだけある場合、対応するモジュールのバージョンが新しいバージョン番号に更新され、変更されたライブラリのみを公開することができるようになります。

このパターンは、Babelが採用している方法でもあります。すべてのバージョンを一緒に変更したい場合は、マイナーバージョン番号を更新することで、すべてのモジュールのバージョンを更新させることができます。

  • 独立モード --independent

独立モード、初期設定時にオプション設定必要  --independent . Independentモードでは、管理者が各ライブラリのバージョン番号を個別に変更することができますので、リリース毎に変更したライブラリのバージョン番号を指定する必要があります。この場合  lerna.json のバージョン番号は変更されず、デフォルトで independent .

---------- ---------- ---------- ---------- ----------

レルナクリーン

各パッケージから node_modules を削除します。

---------- ---------- ---------- ---------- ----------

レルナ輸入

指定したgitリポジトリから、lerna管理下のパッケージとしてインポートします。

<テーブル

--フラット化

マージの競合がある場合、ユーザーはこのオプションを使用して、いわゆる別コミットを行うことができます lerna import ~/Product --flatten

-dest

インポート先のディレクトリを指定します(lerna.jsonに設定されているディレクトリ)。 lerna import ~/Product --dest=utilities

レルナアド

各パッケージの依存関係に対して、パッケージのバージョンを追加する

lerna add <package>[@version] [--dev] [--exact]

レルナリンク

クロスリファレンス・ライブラリのリンク

---------- ---------- ---------- ---------- ----------

レーナクリエイト

新規パッケージ

---------- ---------- ---------- ---------- ----------

lerna.jsonの構文解析

{
  "version": "1.1.3",
  "npmClient": "npm",
  "command": {
    "publish": {
      "ignoredChanges": [
        "ignored-file",
        "*.md"
      ],
      "allowBranch": ["master", "feature/*"]
    },
    "bootstrap": {
      "ignore": "component-*",
      "npmClientArgs": ["--no-package-lock"]      
    }
  },
  "packages": ["packages/*"]
}

LERNAリリース関連

1、ルナパブリッシュとは

  • lerna update を実行して、公開が必要なパッケージを決定します。
  • 必要であれば、lerna.jsonのバージョンが更新されます
  • 更新されたすべてのパッケージの package.json のバージョンフィールドを更新します。
  • すべてのアップデートされたパッケージの依存関係を更新する
  • 新しいバージョンの git コミットまたはタグを作成します。
  • パッケージをnpmに公開するには

2, lernaのpublishに失敗した後の対処法、以下の通り: from-packageを使用する。

位置づけ

バンプ  from-git

でサポートされているセンバーキーワードに加え、以下のキーワードがサポートされています。  lerna version lerna publish  もサポートしています。  from-git  キーワードを使用します。このキーワードは  lerna version  これは、手動でバージョンを上げたいが、パッケージの内容自体は自動化されたプロセスで一貫して公開されたいCIシナリオで有用です。

バンプ  from-package

と同様に  from-git  キーワードは、公開するパッケージのリストが、それぞれの  package.json  を参照して、レジストリに存在しないバージョンのパッケージがあるかどうかを判断します。レジストリに存在しないバージョンはすべて公開されます。  lerna publish  は、レジストリへのすべてのパッケージの公開に失敗しました。

具体的に参照してください。 https://github.com/lerna/lerna/tree/master/commands/publish#readme

3, シンボリックリンクの問題点

webpackをパッケージに入れている場合、その中のローダーがうまくいかない可能性が高いです .

pkg1 パッケージの下に、pkg2 パッケージの下にある別のパッケージに依存するパッケージがあるとします。
lerna bootstrap を実行すると、pkg1/node_modules の下に pkg2 のシンボリックリンクが表示されます。

問題は、pkg2 にある TS ファイルを pkg1 に書き出して持ってきたのですが、それが本当のローダーに当たらないことがわかりました。

webpack 系のツールで pkg1 をコンパイルして実行すると、webpack ローダーがデフォルトでパスを決定するため、pkg2 へのパスが実パスに対応し、pkg2 へのパスは [project root]/package/pkg2 ではなく [project root]/package/pkg1/node_modules/pkg2 .

このように、pkg2 のソースコードが pkg1 のローダを通過する必要がある場合 (例えば pkg2 の TS が pkg1 の ts-loader を通過する場合) は、特別な設定が必要になります。これはシンボリックリンクを使わない実際のシナリオとは全く異なるものです。
また、多くの設定(postcssrc、babelrc、eslintrcなど)は、ファイルが解決された状態で解決されます。

そのため、webpack ローダーが実際のファイルへのパスではなく、シンボリックリンクへのパスに基づいて include/exclude 設定を解決するのは良いことでしょう。

そこで、webpack の resolve.symlinks を参照し、この問題を解決してください。 公式ドキュメント .

4、cnpmのソースが無効であることを指定する。

によると gitlabの問題 公開時に引数は受け付けず、npmリポジトリのみ使用可能です。
しかし、2.xの古いバージョンもサポートされており、私がテストした時点では 3.3.2 3.x lerna指定のcnpmソースパブリッシュは無効です。


参考 https://www.jianshu.com/p/2f9c05b119c9

https://www.jianshu.com/p/8b7e6025354b