Git に node_modules フォルダをコミットするべきですか?

The 2021 JavaScript Full-Stack Bootcamp is NOW OPEN FOR SIGNUPS!

Git に node_modules フォルダをコミットするべきですか?

私は Git と述べましたが、あなたがたまたま使用するバージョン管理システムにも同様に適用できます

その質問はよい質問です。

node_modules フォルダーをコミットせず、代わりに .gitignore ファイルに追加することを提案します。

この決定を覆す特別なニーズがある場合もあります。 新しいパッケージを追加すると、package.jsonpackage-lock.json の変更を保存します。パッケージのバージョンを更新すると決めたら、package-lock.json ファイルの変更だけを保存します。

package-lock.json は npm の比較的新しい機能で、これまで使われていた shrinkwrap コマンドを廃止しています

何百MB もの依存関係をリポジトリに入れておく必要がないので、時間の経過と共に作業が速くなることを意味しています。 ブランチの切り替えとコードのチェックアウトは、リポジトリ サイズに大きく影響される 2 つの操作です。

When working with branches, you may have merge conflicts that extend beyond your code, instead, involve dependencies code.ブランチで作業していると、自分のコードを超えて、依存関係のあるコードを含むマージ競合が発生します。 これは、対処するのに良いものではなく、多くの時間を失うことになるかもしれません。 依存関係を変更する場合、プルリクエストまたはマージは、プロセスに関与する多くのファイルを持つことになります。 開発マシンとは異なるプラットフォームにデプロイする場合 (一般的な使用例: Mac で開発し、Linux にデプロイする場合)、ツールは遅くなり、完全な差分を表示しないことにさえなります (たとえば、GitHub など)。

node_modules をコミットしないことは、必須ステップとして package.json (および package-lock.json) にすべてのモジュールをリストアップする必要があることを意味します。 これは、そうする勤勉さがないかもしれないし、そうしないといくつかの npm 操作が壊れるかもしれないので、素晴らしいことです。

Tip: package-lock.json ファイルの導入以来、package.json ファイルで特定のバージョンを使用する必要はもうないのです。

別々の dependenciesdevDependencies のセットを使用している場合、node_modules フォルダーをコミットすると、基本的に devDependencies をコミットすることになり、運用ビルドでそれらを取り除く (簡単な) 方法はありません。

node_module をコミットする理由とそれを緩和する方法

npm パッケージはその作成者によって npm レジストリーから削除されることがあるかもしれません。 2016年の有名なleft-pad事件で起こったことです(詳しくはこちら)。 人気のあるパッケージでこのようなことが起こるのは非常に稀です。 この場合、その特定の機能の一部にアクセスできなくなる可能性があります。

また、npmは無期限に存在することが保証されておらず、消滅する可能性があるため、将来的にアプリケーションの全コードを持つことを保証する簡単な方法は、アプリケーションと一緒にそれをコミットすることだと主張するかもしれません。

パッケージを使用するたびに、GitHub でフォークを作成し、時々、オリジンでそれを最新に保つ (自動化可能)。

パッケージには何十もの独自の依存性があるので、これは常に実用的とは限りません。

Options include

  • sinopia
  • npm_lazy
  • npm-lazy-mirror
  • artifactory
  • npm Enterprise, npm 社より

依存関係をコミットするもう 1 つの理由は、バグを見つけたときや、ライブラリに何かを追加したいときに、コードをすばやく編集できることです。

これは諸刃の剣です。そうすると、新しいリリースがなされた場合にパッケージをアップグレードする能力を失いますし、迅速で一時的な修正にちょうど良いのです。

最適な解決策は、元のプロジェクトに望むことを行う PR を提出するか、それをフォークして、フォークを依存関係として使用することです。

Node.js Handbook を無料でダウンロード

The 2021 JavaScript Full-Stack Bootcamp IS NOW OPEN FOR SIGNUPS UNTIL NEXT TUESDAY ! この機会を逃さず、今すぐサインアップしましょう!

More node tutorials:

  • How to use promises and await with Node.js callback-based functions
  • The Node Core Modules
  • Parsing JSON with Node.JsMore node tutorials:Node.Js
  • How to use promises with Node.js callback-based functionsHow to use promises and await with Node.js callback-based functionsNode.js でファイルディスクリプタを扱う
  • Node.js Streams
  • ファイルの最終更新日を取得する方法
  • The Pug Guide
  • Get the current folder in Node
  • How to use the Node.js REPL

コメントを残す

メールアドレスが公開されることはありません。