[解決済み] package-lock.json ファイルは .gitignore に追加する必要がありますか?重複
質問
プロジェクト上にインストールされている依存関係のバージョンをロックするには、コマンド
npm install
というファイルを作成します。
package-lock.json
. これは
Node.js v8.0.0
と
npm v5.0.0
を追加しました。
にもかかわらず Node.js と npm このファイルをコミットすることについての推奨事項、それを行うことを避けるべきであるときに関するいくつかの懸念は、また、オプションです。通常、私たちはプロジェクトでコミットしますが、それにもかかわらず、それは特異な質問です。
をコミットすべきですが
package-lock.json
ファイルをコミットすべきですが、そうすべきではない特定のケースもあります。たとえば、プロジェクトの依存関係の最新版をテストしたい場合、オプションで
package-lock.json
を
.gitignore
.
ということで、質問は以下の通りです。
-
には
package-lock.json
ファイルを.gitignore
? - 私たちが特に必要とする状況はありますか? しなければならない または は不可 を実行するか?
どのように解決するには?
いや、その
package-lock.json
べきではない
に追加されます。
.gitignore
. その代わり、強くお勧めします。
-
を追加します。
package-lock.json
をバージョンコントロールリポジトリに追加してください。 -
使用する
npm ci
の代わりにnpm install
を使用すると、ローカルおよびデプロイメントパイプラインの両方でアプリケーションをビルドする際に
(そのci
コマンドは [email protected] から利用可能です。もし疑問があれば npm via をアップグレードしてください。
npm install -g npm
.)
の最大の欠点の 1 つは
npm install
コマンドの最大の欠点は、その予期せぬ動作です。
package-lock.json
であるのに対し
npm ci
はロックファイルのバージョンだけを使用し、もし
package-lock.json
と
package.json
がずれている。
また
npm ci
が必要です。
が存在することが必要です。
package-lock.json
の存在を必要とし、それがない場合はエラーを表示します。
プロジェクトの依存関係が異なるマシン間で信頼できる方法で繰り返し解決されることを信頼できるようにするための強力な使用事例があります。
さらに
npm ci
を丸ごと核攻撃します。
node_modules
フォルダ全体を削除し、ローカルの変更ではなく実際の依存関係で作業できるようにします。
npm install
.
から
package-lock.json
からは、まさに「known-to-work」な状態を得ることができます。
過去に私は、プロジェクトに
package-lock.json
/
npm-shrinkwrap.json
/
yarn.lock
ファイルでは、ランダムな依存関係が壊れるような更新をされたために、ある日ビルドが失敗することがあります。(多くのライブラリが semvar バージョン管理ガイドラインを尊重していますが、マイナー アップグレードで壊れないという保証はありません)。
これらの問題は、時々、最後の作業バージョンが何であったかを推測しなければならないので、解決するのが難しいです。
プロジェクトのために最新の依存関係をテストすることに関して。これは
npm update
はそのためのものであり、開発者によって実行されるべきであり、開発者はローカルでもテストを実行し、問題が発生すればそれを解決し、そして変更された
package-lock.json
. (アップグレードに失敗した場合は、最後に動作していた
package-lock.json
.)
さらに、私はすべての依存関係を一度にアップグレードすることはほとんどなく (それもさらなるメンテナンスが必要になるかもしれないので)、 むしろ必要な更新を選びます (たとえば
npm update {dependency}
や
npm install {dependency}@2.1.3
). これが、私がこれを手動メンテナンスのステップと見なすもう一つの理由です。
もし、本当に自動化したいのであれば、そのための仕事を作ることができます。
- リポジトリをチェックアウトする
- npm updateを実行します。
-
テストの実行
- テストに合格したら、コミットしてリポジトリにプッシュする。
- さもなければ失敗し、手動で解決するよう問題を報告
これは Jenkins などの CI サーバーでホストされるものであり、前述の理由でファイルを
.gitignore
.
または 引用 npm doc :
生成されたパッケージロックはソース管理にコミットすることを強くお勧めします。 ソース管理へコミットすることを強く推奨します。 デプロイメント、CI/継続的インテグレーション、およびパッケージソースで これにより、チームの他の誰でも、デプロイメント、CI/継続的インテグレーション、およびパッケージソースで npm install を実行する誰でも、あなたが開発していたのとまったく同じ ツリーを取得することができます。さらに、これらの変更による差分 さらに、これらの変更の差分は人間が読むことができ、npmがあなたのnode_moduleに加えた変更を知らせてくれます。 npm があなたの node_module に行った変更を知らせてくれます。 依存関係が更新されたか、ホイストされたか、などに気づくことができます。
また
との違いについて
npm ci
と
npm install
:
- プロジェクトに既存のpackage-lock.jsonまたはnpm-shrinkwrap.jsonがあることが必要です。
- パッケージロック内の依存関係がpackage.json内の依存関係と一致しない場合。
npm ci
はパッケージロックを更新するのではなく、エラーで終了します。 を終了します。npm ci
は一度にプロジェクト全体しかインストールできません。このコマンドで個々の依存関係を追加することはできません。- もし
node_modules
が既に存在する場合、それは自動的に削除され、その後にnpm ci
がインストールを開始する前に自動的に削除されます。- に書き込まれることはありません。
package.json
やパッケージロックのいずれにも書き込まれません: インストールは基本的に凍結されます。
関連
-
[解決済み】npm 5で作成されたpackage-lock.jsonファイルはコミットするのでしょうか?
-
[解決済み] Git が追跡したファイルを .gitignore に登録したまま「忘れる」ようにするにはどうしたらいいですか?
-
[解決済み] ローカルファイルシステムからファイルを削除せずに、Git リポジトリからファイルを削除する
-
[解決済み] インストールされているnpmパッケージのバージョンを検索する
-
[解決済み] npm package.jsonファイルのdependencies, devDependencies, peerDependenciesの違いは何ですか?
-
[解決済み] .gitignoreと.gitkeepの違いは何ですか?
-
[解決済み] Android Studioプロジェクトの.gitignoreには何を入れるべきですか?
-
[解決済み] なぜ "npm install" は package-lock.json を書き換えてしまうのですか?
-
[解決済み】Gitバージョン管理でファイルの変更履歴を見る
-
[解決済み] Javascriptによるタッチスクリーンデバイスの検出
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】npm 5で作成されたpackage-lock.jsonファイルはコミットするのでしょうか?
-
[解決済み] Node.jsのNPMモジュール(package.json)のdevDependenciesのインストールを防ぐにはどうすればよいですか?
-
[解決済み] JavaScriptで次の要素/前の要素を取得しますか?
-
[解決済み] jqueryでdivの要素がオーバーフローしていないかチェックする
-
[解決済み] チェックボックスが選択されているかどうかを確認するjQuery
-
[解決済み] javascript の関数から `undefined` と `null` のどちらを返すのが良いのでしょうか?
-
[解決済み] JavaScript のオブジェクトの配列を比較し、最小値/最大値を取得する
-
[解決済み] TypeScriptプロジェクトで既存のC#クラス定義を再利用する方法
-
[解決済み] javascriptで文字列から関数を作成する方法はありますか?
-
[解決済み] javascriptのキャンバスで画像をリサイズする (スムーズ)