The 2021 JavaScript Full-Stack Bootcamp is NOW OPEN FOR SIGNUPS!
Git に node_modules フォルダをコミットするべきですか?
私は Git と述べましたが、あなたがたまたま使用するバージョン管理システムにも同様に適用できます
その質問はよい質問です。
node_modules フォルダーをコミットせず、代わりに .gitignore
ファイルに追加することを提案します。
この決定を覆す特別なニーズがある場合もあります。 新しいパッケージを追加すると、package.json
と package-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
ファイルで特定のバージョンを使用する必要はもうないのです。
別々の dependencies
と devDependencies
のセットを使用している場合、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