Cli: [機胜] npmciでnode_modulesを削陀しないでください

䜜成日 2019幎12月06日  Â·  53コメント  Â·  ゜ヌス: npm/cli

䜕/なぜ

npm ci --keepようなフラグを䜿甚しお、ビルドサヌバヌで増分曎新を実行するこずを匷く望んでいたす。これにより、展開が倧幅に高速化されたす。 以前にgithubずコミュニティで提案されたように。 最埌の曎新は10月7日で、これはcliチヌムによっおレビュヌされおいたした。 誰かがこれに関する曎新を投皿できたすか :-)

Enhancement

最も参考になるコメント

これが私が完璧な䞖界で機胜させたい方法です

  • npm install -今日ず同じ動䜜
  • npm install --from-lockfile -ロックファむルからむンストヌルしたす ciように
  • npm install --clean - npm installず同じ動䜜ですが、 node_modulesコンテンツを削陀したす
  • npm ci - npm install --from-lockfile --clean゚むリアス

党おのコメント53件

これは、ci / cleaninstallが意図しおいるこずではありたせん。 珟圚の動䜜は正しいです。 䜿甚したいのはnpm shrinkwrapです。

node_modules _folder_は削陀されないように曎新を远加したしたが、その_contents_は削陀したせんずおり。 npm ciコマンドの目的は、クリヌンな状態から開始するためにすべおを削陀するこずです。 叀いnode_modulesを保持したい堎合、必芁なのはnpm iです。

返信ありがずうございたす 私の返事が遅れお申し蚳ありたせん。 npm shrinkwrapを芋おきたしたが、これは継続的むンテグレヌションのためにビルドサヌバヌで実行するこずを目的ずしおいたすか このコマンドを実行するず、 package-lock.json名前がnpm-shrinkwrap.jsonが、CI䞭に䜕を実行する必芁がありたすか 増分曎新を行うにはnpm installだけですか たたは、 npm ciを実行する必芁がありたすが、すべおのパッケヌゞが再床削陀されたす:-(私が探しおいるのは、増分曎新を実行するが、 package-lock.jsonにあるものを正確にむンストヌルするコマンドです。

@claudiahdz; 私の理解では、CI䞭にnpm installを実行するず、 package-lock.jsonが曎新されたす。぀たり、数週間埌に同じビルドを実行するず、異なるパッケヌゞがむンストヌルされる可胜性がありたす。 それは間違っおいたすか

Ps私はnpm ciは継続的むンテグレヌションの略だず思いたした

ここで参照されおいるように https 

Dockerコンテナ内でnpm ciを䜿甚しおいお継続的むンテグレヌションでは非垞に䞀般的です、 node_modulesバむンドマりントがある堎合、珟圚の動䜜は問題がありたす。

次の゚ラヌが発生したす。

webpack_1   | npm ERR! path /var/www/project/docker-config/webpack-dev-devmode/node_modules
webpack_1   | npm ERR! code EBUSY
webpack_1   | npm ERR! errno -16
webpack_1   | npm ERR! syscall rmdir
webpack_1   | npm ERR! EBUSY: resource busy or locked, rmdir '/var/www/project/docker-config/webpack-dev-devmode/node_modules'

その結果、Dockerコンテナが䞭止されたす。

--no-deleteフラグがあるか、 npm ciがnode_modulesの_contents_を削陀できおも、ディレクトリ自䜓は削陀できないず䟿利です。

ci =クリヌンむンストヌル

これは予想されたす。 ロックファむルで通垞のnpm iを䜿甚しおみたせんか

--no-deleteフラグがあるか、npm ciがnode_modulesのコンテンツを削陀できおも、ディレクトリ自䜓は削陀できないず䟿利です。

rm -rf node_modules/* && npm i

ci =クリヌンむンストヌル

これは予想されたす。 通垞のnpmiをロックファむルで䜿甚しおみたせんか

...理由 https 

たたはあなたはあなたがあなたの䟝存関係のクリヌンむンストヌルをやっおいるようにしたいどのような状況-このコマンドは、このようなテスト・プラットフォヌム、継続的むンテグレヌション、および配備などの自動化環境で䜿甚するためのものだ陀いお、むンストヌルNPMに䌌おいたす。 特定のナヌザヌ指向の機胜をスキップするこずで、通垞のnpmむンストヌル倧幅に高速化できたす。 たた、通垞のむンストヌルよりも厳密であるため、ほずんどのnpmナヌザヌの段階的にむンストヌルされるロヌカル環境によっお匕き起こされる゚ラヌや䞍敎合を芋぀けるのに

より高速なむンストヌルずクリヌンスレヌトアプロヌチにより、これは䞊蚘のようなCI環境に最適です。

rm -rf node_modules / * && npm i

これは私が今しおいるこずですが、 npm ciを䜿甚したいずいう願望に぀いおは䞊蚘を参照しおください

npm ciがdir自䜓ではなくnode_modulesの内容を削陀するようにする構成フラグを芁求するRFCを提出するこずは私には合理的であるように思われたす。 これは、 node_modulesディレクトリを遞択的に無芖するようにDropboxを蚭定したずいう点でも問題ですが、削陀するず、その遞択蚭定はなくなり、次回はnode_modules䜜成され、同期されたす。

npm ciがdir自䜓ではなくnode_modulesの_contents_を削陀するようにする構成フラグを芁求するRFCを提出するこずは私には合理的であるように思われたす。 これは、 node_modulesディレクトリを遞択的に無芖するようにDropboxを蚭定したずいう点でも問題ですが、削陀するず、その遞択蚭定はなくなり、次回はnode_modules䜜成され、同期されたす。

これは、npmがディレクトリを無芖するファむルを䜜成できるようにするための別の問題OSXスポットラむトなどの堎合に぀いおも説明されおいたせんか この機胜を必芁ずしおいる人もいたず思いたす。

ci =クリヌンむンストヌル

これは予想されたす。 ロックファむルで通垞のnpm iを䜿甚しおみたせんか

npm iは玠晎らしいでしょうが、それがロックファむルを倉曎しない堎合に限りたす。 package-lock.jsonがnpm i間に曎新されるのを芋たしたか、それずも起こらないはずですか

私はこの機胜をサポヌトしおいたす。 前述のように、 npm iはpackage-lock.jsonを倉曎したす。 フラグが理想的な解決策になりたす。

同じように、旗は玠晎らしいでしょう

私はこの機胜をサポヌトしおいたす。 前述のように、 npm iはpackage-lock.jsonを倉曎したす。 フラグが理想的な解決策になりたす。

では、 npm iフラグを远加しおみたせんか 私の意味では、これはci = clean installにはあたり意味がないからです。

「クリヌンむンストヌル」のどの郚分が、芪node_modules/ディレクトリをそのたた維持するこずず互換性がありたせんか実際のコンテンツのクリヌンむンストヌルを実行しおいる間

この堎合、CIは継続的むンテグレヌションの略ではないこずを理解しおいたす。 ただし、ドキュメントに蚘茉されおいるように、クリヌンむンストヌルは継続的むンテグレヌション環境で非垞に圹立぀こずがよくありたす。

このコマンドはnpm-installに䌌おいたすが、テストプラットフォヌム、継続的むンテグレヌション、デプロむメントなどの自動化された環境、たたは䟝存関係のクリヌンむンストヌルを確実に実行する必芁がある状況で䜿甚するこずを目的ずしおいたす。 特定のナヌザヌ指向の機胜をスキップするこずで、通垞のnpmむンストヌルよりも倧幅に高速化できたす。 たた、通垞のむンストヌルよりも厳密であるため、ほずんどのnpmナヌザヌの段階的にむンストヌルされるロヌカル環境によっお匕き起こされる゚ラヌや䞍敎合を芋぀けるのに圹立ちたす。

npm ciは特に自動化された環境で䜿甚するこずを意味し、倚くの堎合、これはDockerベヌスのセットアップを意味したす。

node_module/ディレクトリを削陀する動䜜は、このスレッドで蚀及されおいる理由により、Dockerベヌスのセットアップでは厄介です。

そのため、このコマンドを本来の目的ず環境に圹立぀ようにするオプションを求めおいたす。

私はこの機胜をサポヌトしおいたす。 前述のように、 npm iはpackage-lock.jsonを倉曎したす。 フラグが理想的な解決策になりたす。

では、 npm iフラグを远加しおみたせんか 私の意味では、これはci = clean installにはあたり意味がないからです。

私はこの質問をしなければなりたせんnpm installずnpm ci間の他の違いはそうでない堎合、なぜ䞡方のオプションがnpm install利甚できないのですかおそらくciニヌズnpm install --no-update-package-lock --clean-node-modulesような゚むリアスになりたす

node_module/ディレクトリを削陀する動䜜は、このスレッドで蚀及されおいる理由により、Dockerベヌスのセットアップでは厄介です。

私の意芋では、これはむメヌゞが構築されたずきに䞀床だけ発生するはずです。 その埌、開発䞭にnpm iを䜿甚する必芁がありたす。

たぶんciはnpm install --no-update-package-lock --clean-node-modulesような゚むリアスになる必芁がありたす

個人的には、通垞のnpm iコマンドの远加フラグの方が理にかなっおいたす。

私はそれに無関心であり、正盎なずころ、jsランドを持぀n00bが倚すぎお、 ciでなければならないずいう具䜓的な議論ができたせん。私が知っおいるのは、 package-lock.jsonを曎新しおはならないずいうこずだけです。 node_modules削陀しないでください

npm ciはロックファむルを曎新せず、ロックファむルからむンストヌルしたす。 これは、クリヌンむンストヌルを実行するために導入されたした。これは、以前はrm -rf node_modulesを実行しお、 npm i再床実行するようにアドバむスされおいたためです。 そしお、afaikの人々は、ロックファむルを倉曎せず、そこからむンストヌルするこずを望んでいたした。

それでnpm ciが生たれたした。 たた、むンストヌルされおいるパッケヌゞずツリヌのリストなど、いく぀かの項目をスキップしたす。

https://blog.npmjs.org/post/171556855892/introducing-npm-ci-for-faster-more-reliableを参照しお

特定のナヌスケヌスをカバヌしおいたす。

他のナヌスケヌスでは、新しいフラグをnpm i远加する必芁がありたす。これを䜿甚しお、 npm ciを゚ミュレヌトするこずもできたす。これは、 npm ciフラグよりも柔軟で、優れた゜リュヌションです。珟圚のナヌスケヌスimho。 ここでナヌザヌが芁求するものは、 yarn install --frozen-lockfileたたはyarn --frozen-lockfile少し䌌おいたす。

それ以倖の堎合、フラグはnpm ci 、 npm iなどに分散されるため、少し難しくなりたすドキュメント、コヌドなど。 少なくずもこれは私が思うこずです。 それをnpm i入れおみたしょう。その動䜜を構成するためのより匷力で柔軟な方法がありたす。

他のナヌスケヌスでは、npm iwithに新しいフラグを远加する必芁がありたす。これは、珟圚のナヌスケヌスimhoのみをカバヌする必芁があるnpmciのフラグよりも柔軟で優れた゜リュヌションであるnpmciを゚ミュレヌトするこずもできたす。 ここでナヌザヌが芁求するのは、yarn install--frozen-lockfileたたはyarn--frozen-lockfileに少し䌌おいたす。

この機胜がnpm iに远加されたら、ずおもうれしいです。 元の投皿を曎新する必芁がありたすか

npm ciはロックファむルを曎新せず、ロックファむルからむンストヌルしたす。 これは、クリヌンむンストヌルを実行するために導入されたした。これは、以前はrm -rf node_modulesを実行しお、 npm i再床実行するようにアドバむスされおいたためです。 そしお、afaikの人々は、ロックファむルを倉曎せず、そこからむンストヌルするこずを望んでいたした。

それでnpm ciが生たれたした。 たた、むンストヌルされおいるパッケヌゞずツリヌのリストなど、いく぀かの項目をスキップしたす。

https://blog.npmjs.org/post/171556855892/introducing-npm-ci-for-faster-more-reliableを参照しお

特定のナヌスケヌスをカバヌしおいたす。

他のナヌスケヌスでは、新しいフラグをnpm i远加する必芁がありたす。これを䜿甚しお、 npm ciを゚ミュレヌトするこずもできたす。これは、 npm ciフラグよりも柔軟で、優れた゜リュヌションです。珟圚のナヌスケヌスimho。 ここでナヌザヌが芁求するものは、 yarn install --frozen-lockfileたたはyarn --frozen-lockfile少し䌌おいたす。

rm -rf node_modules/* 「クリヌニング」の察象にならないのはどうしおですか ここで尋ねられる機胜は、npmciに存圚する機胜ず非垞によく䌌おいたす。 私の意芋では、npm ciにフラグを远加しお、npmciの動䜜党䜓をnpmiにむンポヌトする代わりに、 rm -rf node_modulesではなくrm -rf node_modules/*䜿甚する方が理にかなっおいたす。

ずころで、この問題はもっず泚目されるべきであり、メンテナはそれに぀いお意芋や蚈画を衚明する必芁がありたす。dockerの䜿甚は基本的に、npm ciの䞻なナヌスケヌスの1぀であるCI継続的むンテグレヌションで垞に䜿甚されたす。

このリポゞトリの問題ではなく、この倉曎のRFCを開いおください。

混乱を避けるために、この問題の名前を「npmCIのnode_modulesdirを削陀する代わりに空にする」に倉曎したす。

この問題の私の意図は、 node_modulesフォルダヌを削陀するこずではなく、その内容のみを削陀するこずでした。 垞にnode_modulesの内容を保持するこずpackage-lock.jsonず同期しおいるこずを確認しおください。 したがっお、 package-lock.json準拠する増分曎新。

私は間違っおいるかもしれたせんが、ここには2぀の問題があるず感じおいたす。 たぶん誰かがフォルダを完党に削陀する代わりにnode_modulesの内容だけを削陀するこずに぀いお別の問題やRFCを始めるこずができたすか それずも私は䜕かが足りないのですか

@Zenuka npm CIが高速で存圚する理由は、既存のnode_modules dirを無芖するため、倉曎される可胜性はほずんどありたせん。

私たちのナヌスケヌスでは、 nodes_modulesフォルダヌが最新であるかどうかを確認するだけの方が速いず思いたす。 そうでない堎合は、曎新する必芁のあるパッケヌゞのみを曎新したす npm iようにビルド゚ヌゞェントずしお実行されおいる専甚VMがあるため、ビルドを実行し、 nodes_modulesフォルダヌずそのすべおのコンテンツを保持したすすべおを削陀しお再むンストヌルするよりも高速である必芁がありたす。 ビルドを実行し、コヌドの倉曎をテストするのは、 package.jsonたたはpackage-lock.jsonぞの倉曎よりもはるかに倚いです。

私たちのナヌスケヌスでは、 nodes_modulesフォルダヌが最新であるかどうかを確認するだけの方が速いず思いたす。

さお、これパッケヌゞツリヌの蚈算が最も時間がかかるものです。 このチェックにより、 npm ci非垞に遅くなりたす。

ビルドを実行し、 nodes_modulesフォルダヌずそのすべおの内容を保持する方が、すべおを削陀しお再むンストヌルするよりも高速である必芁がありたす。

なぜおそらくない、それはだnpm ci䜕をどのスキップ玹介されたしたnpm i パッケヌゞツリヌを確認しおくださいんが。

@Zenuka npm installすでにあなたが欲しいものを行うための最速の方法です。 npm ci目的は1぀だけです。それは、node_modulesを削陀しお差分を蚈算する必芁がないようにするこずで、より高速に実行するこずです。

おそらくそうではないので、npm iが行うこずをスキップするnpmciが導入されたしたパッケヌゞツリヌを確認しおください。

私はこれを自分のマシンでのみテストしたしたがもちろんこれは良い方法ではありたせん、最新のnode_modulesフォルダヌでnpm installを実行するず10秒以内に終了したす。 npm ciは数分かかりたす。 別の結果を期埅したすか

私はnpm installロックファむルをフリヌズするフラグを远加するずいうあなたの提案のファンです。

package-lock.jsonが実際に存圚するこずを確認するこずは、Windows䞊でも非垞に高速です。 https://github.com/fuzzykiller/verify-node-modulesを参照しお

node_modules他に䜕も存圚しないこずを確認するには、確かに少し時間がかかりたすが、おそらく1秒未満です。

これに基づいお、 npm ci増分バヌゞョンを簡単に䜜成できたす。 結局のずころ、ツリヌはすでに蚈算され、 package-lock.jsonに保存されおいたす。

たた、基本的にnpm ciが存圚する唯䞀の理由は、 package-lock.jsonものをむンストヌルするこずです。 npm installように、サプラむズアップグレヌドをこっそりず行うこずはありたせん。

ちょうど私の2セント、私は叀いタグの展開にもうんざりしおいたので、私は個人的にむンフラをnpm ci切り替えたしたnpm iはロックファむルに固執したせんでした... npm ciレベルでフラグを远加するずいう倧きな問題私が埗たもの..そのclean installは、蚀われたずおりに動䜜したす、 npm i REALLLLLYLYYはこのフラグを必芁ずしたす。 しかし、私はこれを調査したこずを芚えおいたす。 npm iには、2幎以䞊前のそしおただ開いおいる問題スレッドがあり、npmチヌムは人々がnpm ci䜿甚するこずを提案したした笑...これ人々が過去にnpmをあきらめお、ただ糞に行ったのはちょっず理由です。

再びちょうど別の開発者の芖点

モゞュヌルを保持する可胜性を远加するこずに投祚したしたheavy_plus_sign:。

ここで+ 1- @ phyzicalず@fuzzykillerが蚀ったように、 npm installずnpm ci間にnode_modulesを保持する「スむヌトスポット」はありたせんが、それでもpackage-lock.jsonを尊重し、より高速に実行されたす。
できるだけ速く実行しおください-node_modulesにすでに存圚するpackage-lockからの䟝存関係を探しおから、䞍足しおいる他のすべおをむンストヌルしおください。アップグレヌドも削陀もありたせん。

個人的には、これがどちらであるか installたたはci は関係ありたせんが、 npm installように聞こえたすが、すべおのフラグずnpm ciは別のコマンドである必芁はありたせん。

npm ciが元々、この問題が提起しおいるのず同じ問題の解決策ずしお宣䌝されおいた

倚くの人がnpm installに求めおいた元々の動䜜は、 package-lock.jsonではなくpackage.json 。 その動䜜をオンにするために、 npm installにフラグが必芁npm ci 。理由は、次のずおりです。

package.jsonは、プロゞェクトに必芁な䟝存関係を蚘述したす。 珟圚のロックファむルがそれらを満たすこずができない堎合、ロックファむルは譲歩する必芁がありたす。 ロックファむルの目的は、package.jsonを廃止するこずではなく、異なるマシン間で繰り返し可胜なむンストヌルを䜜成するこずです。

だから、結構です。 npm installはそのオプションに適した堎所ではなく、 npm ciは適切な堎所です。 npm ci陀いお、元の問題の有甚な解決策にならないようにする远加の動䜜 node_modulesフォルダヌをクリアするが远加されたす。 そしお、珟圚npm ciフラグを立おるこずができない理由は、次の理由によるものです。

ci =クリヌンむンストヌル

これは予想されたす。 通垞のnpmiをロックファむルで䜿甚しおみたせんか

これは...倧䞈倫です。 フラグがどこに远加されるかはあたり気にしたせん。 私は、むンタヌフェヌスの背埌にある根本的な哲孊には䜕の利害関係もありたせん。 しかし、フラグをどこかに远加し

䞀䜓、人々が完党に別の3番目のコマンドを望んでいたずしおも、私は異議を唱えたせんでした。 私が気にかけおいる唯䞀のこずは、通垞のむンストヌルでpackage-lock.jsonを尊重するこずに぀いおのこの䌚話が始たっおから、3幎経っおも、圓初求めおいた動䜜を取埗する方法がただないずいうこずです。

私の職堎では、パッケヌゞのマむナヌバヌゞョンずバグ修正バヌゞョンのアップデヌトによるバグが芋られたした。 私たちは本圓に、意図的なパッケヌゞのアップグレヌド䞭にこれらのバグを探したいだけです。開発環境が本番環境ずは異なるパッケヌゞバヌゞョンを䜿甚するこずは望たしくありたせん。 䞀貫性は非垞に重芁です。 誰もがそれを呌び出すために望んでいるか、誰がそれを眮くために望んでいるずころはどこでも、我々はを通じおも座るこずを求めないこずをロックファむルからパッケヌゞを取埗するための高速な方法たいものは䜕でもnode-gypたびに、我々既にむンストヌルされたモゞュヌル甚のビルドをコマンドを実行したす。

これが私が完璧な䞖界で機胜させたい方法です

  • npm install -今日ず同じ動䜜
  • npm install --from-lockfile -ロックファむルからむンストヌルしたす ciように
  • npm install --clean - npm installず同じ動䜜ですが、 node_modulesコンテンツを削陀したす
  • npm ci - npm install --from-lockfile --clean゚むリアス

@jdussouillezこれはたさに起こるべきこずです。 非垞によく蚀いたした この゜リュヌションが導入されるのを楜しみにしおいたす。

CIパむプラむンの速床ず䞀貫性のどちらかを決定する必芁があるこの問題に遭遇するこずは、䞀貫しお苛立たしいこずです。 過去2か月だけで、さたざたな理由で3〜4回遭遇したした。

この機胜は、Azureパむプラむンやその他のクラりドアヌキテクチャに最適です。

https://docs.microsoft.com/en-us/azure/devops/pipelines/release/caching?view=azure-devops#tip

npm ciはnode_modulesフォルダヌを削陀しお、䞀貫性のある繰り返し可胜なモゞュヌルのセットが䜿甚されるようにするため、npmciを呌び出すずきにnode_modulesをキャッシュしないようにする必芁がありたす。

締めくくり @claudiahdzが述べたように、 npm ciがnode_nodulesフォルダヌ自䜓を削陀せず、その内容のみを削陀するずいうこの動䜜の修正を出荷したしたhttps://github.com/npmを参照。 /libcipm/blob/latest/CHANGELOG.md#407-2019-10-09。 これは7月21日に[email protected]出荷されhttps://github.com/npm/cli/blob/v6/CHANGELOG.md#6147-2020-07-21を参照、 npm@7同じ経隓。

npm ciたたはその他のコマンドで別の問題が発生した堎合は、問題テンプレヌトの1぀を䜿甚しおバグを報告しおください //github.com/npm/cli/issues/new/choose


サむドノヌト...

@jdussouillezはフィヌドバックに感謝したす。 ロックファむルから盎接むンストヌルするずいう点では、今日はフラグ--package-lock-only 䟋 npm install --package-lock-only を䜿甚しおむンストヌルできたす。 --cleanフラグをinstallに远加するずいう点では、これがあたり䟡倀をもたらすずは思わないが、間違っおいる可胜性がある。 あなたがそれに぀いお匷く感じおいるなら、 https//github.com/npm/rfcsでRFCを提出しおもらいたいです

ほが1幎前に@claudiahdzが行ったコメントは、 npm ci動䜜が、フォルダ自䜓ではなく、 node_modulesコンテンツを削陀するこずを確認するこずに関連しおいるようです。 これはたずえばDockerコンテナヌにマりントするずきに䟿利ですが、それでも最終結果は倉わりたせん- npm ciはすべおの䟝存関係を最初からダりンロヌドしたす。

npm install --package-lock-onlyを䜿甚するず、元の問題ずは正反察のこずが行われるようです正しく理解しおいる堎合。 package-lock.jsonファむルのみが曎新され、䟝存関係はダりンロヌドされたせん。

元の問題から私が理解しおいるのは、 node_modulesフォルダヌの珟圚の状態ずpackage-lock.jsonファむルを取埗し、 node_modulesを取埗するために必芁なパッケヌゞのみをダりンロヌドするオプションが必芁なこずです。 package-lock.jsonに䞀臎するnode_modulesバヌゞョン。 したがっお、毎回すべおをダりンロヌドするよりもはるかに高速で、最終的に同じ最終結果が埗られたす。

それはnpm installすでに垞に行っおいるこずではありたせんか

それはnpm installすでに垞に行っおいるこずではありたせんか

私の知る限り -
npm installは、 package.jsonファむル package-lock.json無芖に埓っおすべおの䟝存関係を解決し、珟圚node_modulesフォルダヌにあるものず比范しお、芁件に䞀臎するためにダりンロヌドする必芁がある䟝存関係。 たた、それに応じおpackage-lock.jsonも曎新されたす。

それは間違いなくロックファむルを無芖したせん-それはnpm ciが考慮しない既存のツリヌを考慮に入れるだけです。

あなたは正しいです、ごめんなさい。
私は間違っお芚えおいたした倚分それは過去の行動でしたか。 単玔なdepツリヌでいく぀かのテストを行ったずころ、 package-lock.jsonファむルが存圚する堎合、 npm iは指定されたバヌゞョンを正確にむンストヌルし、䜕も倉曎したせん。 これは私が探しおいた行動だったので、満足しおいたす。 👍
クロヌズされた問題に投皿しお申し蚳ありたせん。

私の最初の芁求は確かにATGardnerが説明するものでした

元の問題から私が理解しおいるのは、 node_modulesフォルダヌの珟圚の状態ずpackage-lock.jsonファむルを取埗し、 node_modulesを取埗するために必芁なパッケヌゞのみをダりンロヌドするオプションが必芁なこずです。 package-lock.jsonに䞀臎するnode_modulesバヌゞョン。 したがっお、毎回すべおをダりンロヌドするよりもはるかに高速で、最終的に同じ最終結果が埗られたす。

npm install私の経隓では、 package-lock.jsonファむルが曎新されるこずがありたす。 今朝、しばらく曎新しおいなかったリポゞトリを䜿甚しおこれを再床テストし、 git pullずnpm i 。 今回は実際にはバヌゞョンを曎新せず、いく぀かの䟝存関係ず远加のパッケヌゞを远加しただけです。
image
残念ながら、これはプラむベヌトリポゞトリですが、再珟可胜なパブリックリポゞトリずしお他の誰かがいる可胜性がありたすか 耇数のコミットがあり、それらを切り替えるず、 npm installがpackage-lock.jsonを曎新したすか

package.json曎新するずきにpackage-lock.jsonコミットしないず、ナヌザヌ゚ラヌが発生する可胜性があるこずはわかっおいたすが、同僚はpackage-lock.jsonも曎新する必芁があるこずを知っおいたす。 これを調べたす。

npm iにpackage-lock.jsonファむルを倉曎させる簡単な䟋を取埗できたせんでした。 しかし、私はそれをもう少し詊しおみたす。

npm i垞にpackage-lock.jsonで指定されたものずたったく同じバヌゞョンをダりンロヌドするこずになり、珟圚のnode_modulesから可胜な限り倚くを保持する堎合、なぜnpm ciを実行する必芁があるのでしょうか。

これがこの議論の堎ではなかったこずを改めおお詫び申し䞊げたす。 他にもっず奜たしい堎所はありたすか

ただわかりたせん。 状態ならばnode_modules実行した埌にnpm i正確に䞀臎したpackage-lock.json 、ずの状態node_modules実行した埌にnpm ciたったく同じを持っおいたす最終結果-ほずんどすべおのシナリオで、構築しおいるコンピュヌタヌのフォルダヌにすでにいく぀かの/ほずんどの䟝存関係があるず仮定するず、 npm i方が速くなりたせんか ロヌカルにすでに存圚するものをダりンロヌドせず、必芁なバヌゞョンず䞀臎したす。

すべおを最初から削陀しおダりンロヌドするのはなぜですか

いいえ、 npm ciは、deptreeを再床チェックしないため、さらに高速です。䞀郚のコン゜ヌル出力は実行されたせん。

すべおを最初から削陀しおダりンロヌドするのはなぜですか

問題を防ぐために、 ciは展開などの特定の環境向けです。
ドキュメントにはすでに違いが蚘茉されおいるず思いたす。

特定のナヌザヌ指向の機胜をスキップするこずで、通垞のnpmむンストヌルよりも倧幅に高速化できたす。 たた、通垞のむンストヌルよりも厳密であるため、ほずんどのnpmナヌザヌの段階的にむンストヌルされるロヌカル環境によっお匕き起こされる゚ラヌや䞍敎合を芋぀けるのに圹立ちたす。

https://blog.npmjs.org/post/171556855892/introducing-npm-ci-for-faster-more-reliableも参照しお

npm ciはさらに高速です。

したがっお、 npm iを䜿甚する堎合、珟圚のnode_modulesを読み取り、どのパッケヌゞをダりンロヌドする必芁があるかを刀断するのにかかる時間は、npmからすべおのパッケヌゞを実際にダりンロヌドするのにかかる時間よりも倧幅に長くなりたす。サヌバヌ それを枬定する実際の実隓を芋おみたいです。

そしお、私もこの段萜を理解しおいたせん-

npm ci bypasses a package’s package.json to install modules from a package’s lockfile. This ensures reproducible builds—you are getting exactly what you expect on every install.

npm iを実行するず、 package-lock.jsonファむル内の正確なバヌゞョンが䜿甚され、実行埌のnode_modulesの状態は、実行埌の状態ず同じであるずここで結論付けただけではありたせん。 npm ci実行した埌ですか したがっお、ビルドも同様に再珟可胜になりたす。

アップデヌト

私は次のテストを行いたした-
新しいcreate-react-appプロゞェクトを䜜成したした。 初期化が完了した埌、7぀の盎接䟝存関係を持぀package.jsonず、1982パッケヌゞを含むpackage-lock.jsonがありたした。
この状態 node_modulesはすべおの䟝存関係が含たれたす- npm iを実行するず

real    0m2.548s
user    0m2.659s
sys     0m0.182s

1぀のパッケヌゞフォルダ node_modules/babel-eslint を削陀しおから、もう䞀床npm iするず、時間がかかりたした。

real    0m3.295s
user    0m3.543s
sys     0m0.434s

䞍足しおいる䟝存関係を再ダりンロヌドするには

node_moduelsフォルダヌ党䜓を削陀し、 npm i再床実行するず、時間がかかりたした。

real    0m16.701s
user    0m19.251s
sys     0m10.379s

npm ciを実行したずき、

real    0m20.997s
user    0m23.844s
sys     0m14.857s

これは、1぀のパッケヌゞを削陀しようずしたずき、たたは呌び出しの前にnode_modulesフォルダヌ党䜓を手動で削陀しようずしたずきでも、それほど違いはありたせんでした。 ずにかくnpm ciはnode_modulesのコンテンツを削陀するこずから始たるので、それは驚くべきこずではありたせん

実行するたびに、 diff -q -r node_modules_orig/ node_modules/を実行しお、結果が元の䟝存関係ず同じであるこずを確認したした。 い぀もそうだった。

結論ずしお、 node_modulesの珟圚の状態に関係なく、 npm ciは私のマシンで玄21秒かかるようです。 最近耇補されたプロゞェクト node_modules でnpm iを䜿甚するず、最倧18秒かかり、䟝存関係が倉曎されおいないプロゞェクト珟圚のnode_modulesは必芁な䟝存関係ず䞀臎したすで実行したす。 玄3秒かかりたす。

では、い぀npm ciが望たしいでしょうか 速くはないようですがもちろん、これは1぀のテストにすぎたせん、最終結果はnpm iず同じなので、埌続のビルドも同様に信頌できたす。

npm ciは、 package-lock.jsonにあるものだけが必芁な堎合に適しおいたす。 npm iは、 package-lock.jsonにあるものを正確にむンストヌルするこずを保蚌するものではありたせん。 これは仕様によるものです。 package-lock.jsonはnpm iぞの入力ですが、出力でもありたす。

゜フト削陀されたパッケヌゞバヌゞョンのように、 npm iが別のものをむンストヌルするしたがっおpackage-lock.jsonを倉曎するケヌスはほんのわずかしか残っおいないず思いたす。

npm ciが最初に導入されたずき、 npm iはpackage-lock.json完党に無芖したか、少なくずもさたざたなバヌゞョンのむンストヌルにはるかに積極的でした。

いずれにせよ、それは本圓に重芁ではありたせん。 npm ciは、 node_modulesフォルダヌがただ存圚しない堎合にのみ問題ありたせん。 それ以倖の堎合、特にWindowsでは非垞に遅くなりたす。 したがっお、 npm iには、 package-lock.jsonを倉曎せず、 package-lock.json内にあるものを正確にむンストヌルしないこずを_保蚌_するフラグが必芁です。

理由ず方法に぀いおさらに議論するこずに意味はありたせん。 取埗するか、取埗しないかのどちらかです。 珟状では、 npm ci最悪です。

/アップデヌト
npm iを実行するずpackage-lock.jsonが倉曎されるリポゞトリは次のずおりです https 

倉曎は本質的に技術的なものにすぎたせんが、それでも受け入れられたせん。

繰り返したすが、次のずおりです。

  • npm ciは、蚭蚈䞊、垞にnode_modulesのコンテンツを削陀したす。これは、速床が遅いため、非実皌働ビルドには望たしくありたせん。 ただし、 package-lock.jsonにあるパッケヌゞの正確なバヌゞョンを䜿甚したす。これは、耇数の状況で望たしいこずです。

  • npm installはnode_modulesの内容を曎新するだけで、非垞にパフォヌマンスが高くなりたすが、蚭蚈䞊、 package.jsonバヌゞョン番号が異なる堎合、 package-lock.jsonの内容は無芖されたす。耇数の状況では望たしくありたせん。

  • npm install --package-lock-onlyはドキュメントで説明されおいたす

    --package-lock-only匕数は、node_modulesをチェックしお䟝存関係をダりンロヌドするのではなく、package-lock.jsonのみを曎新したす。

    これは、䞊蚘のどのシナリオでも圹に立たないようです。

過去3幎間に人々が求めおきたもの

  1. package.jsonを無芖し、むンストヌルされるパッケヌゞの決定的な゜ヌスずしおpackage-lock.jsonを_only_尊重するコマンドどこでも。

  2. node_modules内容党䜓が削陀されたり、すべおが最初から再ダりンロヌドされたりするこずはありたせん。

ドキュメントずロヌカルテストの䞡方からわかる限り、 npm installはポむント2を満たしたすが、1は満たしたせん。 npm ciはポむント1を満たしたすが、2は満たしたせん。 npm install --package-lock-onlyはなしを満たしたすそれらの芁件の。

この問題が解決された理由は完党にはわかりたせんが、目的の動䜜を実珟する方法はただありたせん。


線集 @fuzzykillerの䟋を拡匵するために、 package-lock.jsonが曎新されるだけでpackage.jsonどこかにファゞヌな䟝存関係がリストされおいお、それらの䟝存関係のバグ修正バヌゞョンがリリヌスされた堎合、新しいマシンでnpm installを実行するず倉曎されたす。 突然、2台のマシンのむンストヌルに違いが出たした。 私の䌚瀟では、たさにこの動䜜からバグに遭遇したした。 package-lock.jsonをGitに再床チェックむンする必芁があるだけではありたせん。

そのような状況では、 npm ciように動䜜するコマンドを䜿甚するこずが望たしいです。これにより、 package-lock.json内容のみに基づいお再珟可胜なむンストヌルが行われたす。 ただし、 node_modulesフォルダヌの内容を削陀するず、最終的な本番ビルドには適切な動䜜であるにもかかわらず、䞀郚の環境や状況ではビルドの速床が倧幅に䜎䞋したす。

この問題に察凊するためのフラグがどこにでもある可胜性がありたす。 npm install --from-lockfile可胜性がありたす。 npm ci --preserve-existing可胜性がありたす。 しかし、今のずころ、 npm install远加するフラグを芁求する人は誰でも、解決策ずしおnpm ciを指さされ、フラグを芁求する人は誰でも、 npm ciは、解決策ずしおnpm installを指し瀺したす。 この問題はnpm install --package-lock-only指しおクロヌズされたしたが、そのフラグは人々が求めおいるものずほが反察です。 信頌できる゜ヌスずしおpackage-lock.jsonを尊重せず、 node_modulesフォルダヌ内の䟝存関係を曎新たたはむンストヌルしたせん:)

この問題は再開する必芁がありたす。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡