LERNAの開発プロセス(ピット内とピット外)
lerna共通apiの概要です。
<テーブル レルナブートストラップ 依存関係のインストール レルナクリーン 各パッケージから node_modules を削除します。 レルナ・イニット lernaライブラリの新規作成 レルナリスト パッケージ一覧を表示する レルナ変更 最後の relase タグ以降に変更されたパッケージを、リストを通してオプションで表示します。 ラーナ差分 最後の relase タグ以降に変更されたパッケージの diff を表示するには、git diff を実行します。 レルナエグゼ各パッケージディレクトリで任意のコマンドを実行する
レルナラン 各パッケージのpackage.jsonにあるスクリプトコマンドを実行するレルナアド
各パッケージの依存関係として、パッケージのバージョンを追加する レルナ輸入 パッケージの紹介 レルナリンク 相互参照可能なライブラリへのリンク ラーナクリエイト 新規パッケージの作成 レーナパブリッシュ パブリッシュ注: lerna [command] -h を使用すると、1つのコマンドの使用法とパラメータを見つけることができます。
lernaブートストラップ
このコマンドを実行すると、次の4つのことが行われます。
- 各パッケージの依存関係をインストールする
- 相互に依存するライブラリを特定のディレクトリにリンクする
- npm run prepublishを実行します。
- 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
関連
-
Expressのエラーを解決する。送信後にヘッダーを設定できない。
-
expressはエラーを報告します。エラー [ERR_HTTP_HEADERS_SENT]: ヘッダがクライアントに送信された後、ヘッダを設定することができません。
-
UnhandledPromiseRejectionWarning:EACCES: 権限拒否エラー(npmでdevを実行した場合)に対する有効な解決策の可能性
-
Mac ノードのバージョニング nvm コマンドが見つかりません。
-
npm install時にundefinedのプロパティを読み込めない('extraneous'を読み込む)。
-
エラーは正常に解決されました。モジュール 'html-webpack-plugin' が見つかりません。
-
Error: Cannot find module '.... /lib/utils/unsupported.js'。
-
Ejsエラーです。デフォルトエンジンが指定されておらず、拡張子も提供されていません。
-
gulp エラー。タスク関数を指定する必要があります
-
ルーティングがエクスポートされないエラー。Router.use() はミドルウェアの関数を必要としますが、Object を取得しました。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン