web-dev-qa-db-ja.com

node.jsで未使用のパッケージをアンインストールまたは整理するnpmコマンド

Node.jsプロジェクト(package.jsonで定義されなくなったもの)から未使用の(宣言されていない)すべての依存関係を単純にアンインストールする方法はありますか。アプリケーションを更新するとき、参照されていないパッケージを自動的に削除します。

360
Tarion

npm Pruneにリストされていないモジュールをアンビルドするには package.json を実行します。

npm help Pruneから:

このコマンドは「無関係な」パッケージを削除します。パッケージ名が指定されている場合は、指定された名前のいずれかに一致するパッケージのみが削除されます。

無関係なパッケージは、親パッケージの依存関係リストに記載されていないパッケージです。

--productionフラグが指定されている場合、このコマンドはdevDependenciesに指定されているパッケージを削除します。

620
Darkhogg

あなたがそうするために数分の時間を心配していないのであれば、解決策は再びローカルモジュールを再構築するためにrm -rf node_modulesnpm installです。

262
Pyrce

不要なパッケージを削除するには npm-Prune を使用できます。

npm Prune [[<@scope>/]<pkg>...] [--production] [--dry-run] [--json]

このコマンドは「無関係な」パッケージを削除します。パッケージ名が指定されている場合は、指定された名前のいずれかに一致するパッケージのみが削除されます。

無関係なパッケージは、親パッケージの依存関係リストに記載されていないパッケージです。

--production フラグが指定されているか、または NODE_ENV 環境変数が production に設定されている場合、このコマンドは devDependencies に指定されているパッケージを削除します。 --no-production を設定すると、 NODE_ENV production に設定されます。

--dry-run フラグが使用されている場合、実際には変更は行われません。

--json フラグを使用すると、 npm Prune の変更(または --dry-run を使用した場合の変更)がJSONオブジェクトとして出力されます。

パッケージロックを有効にした通常の操作では、モジュールがインストールされたときに無関係なモジュールが自動的に整理されます。このコマンドには --production フラグを付けるだけで十分です。

もしあなたがパッケージロックを無効にしているのであれば、余分なモジュールは削除されないでしょう。そして npm Prune を実行するのはあなた次第です。

重複を減らすためにnpm-dedupeを使う

npm dedupe
npm ddp

ローカルパッケージツリーを検索し、依存関係を複数の依存パッケージでより効果的に共有できるように、依存関係をツリーの上位に移動することによって全体的な構造を単純化しようとします。

たとえば、次の依存グラフを見てください。

a
+-- b <-- depends on [email protected]
|    `-- [email protected]
`-- d <-- depends on c@~1.0.9
     `-- [email protected]

この場合、 npm-dedupe はツリーを次のように変換します。

 a
 +-- b
 +-- d
 `-- [email protected]

ノードのモジュールルックアップの階層的な性質のため、bとdは両方ともツリーのルートレベルにある単一のcパッケージによって依存関係が満たされます。

重複排除アルゴリズムはツリーを歩き回り、たとえ重複が見つからない場合でも、各依存関係を可能な限りツリー内で上に移動します。これにより、フラットツリーと重複排除ツリーの両方が作成されます。

7