package.json(NPM)にリストされているすべての依存関係をどのようにアンインストールしますか?


107

アプリケーションルートでpackage.jsonファイルを定義して実行npm install -gすると、package.jsonで定義されているすべての依存関係がglobabllyでインストールされます。

ただし、これは逆に機能しないようです。

私が行う場合はnpm uninstall -g自分のアプリケーションのルートには、それにパッケージ名を渡すために私をexpceting、エラーがスローされます。

これは、私がインストールした同じパッケージもアンインストールするべきではないのですか?

私は何か間違ったことをしていますか?


1
ちなみに、npm -gを使用しないことの私の推論。peterlyons.com/problog/2012/09/…–
Peter Lyons

1
プロジェクトでモジュールを使用する場合は、ローカルにインストールする必要があることに注意してください。モジュールをグローバルにインストールすると、たとえばexpressjsやexpress(1)のように、ターミナルに追加のコマンドが提供されるだけです。
ワルチメデ2013年

@sgwilly node_modulesをグローバルに使用する必要があることについて間違っています- 文書でそのようにさえ言っています-nodejs.org/api/modules.html#modules_all_together-require ()関数は、さまざまな場所で見えるという点で「スマート」ですグローバルnode_modulesを含むモジュールのパスを試して解決する
qodeninja

私はもっ​​と具体的だったはずです:require()がグローバルにインストールされたモジュールを見つけるのに十分スマートであることは事実です。すべてのプロジェクトが同じモジュールの同じバージョンに依存している場合に機能します。しかし、依存関係をグローバルに管理するだけでは、異なるモジュールバージョンに依存するプロジェクトを維持するのが難しい場合があります。そのため、モジュールを常にローカルにインストールし、便利な実行可能コマンドにアクセスする場合にのみグローバルにインストールすることがベストプラクティスです。
ワルチメデ2013年

@sgwilly-ここであなたの考えを共有してくれてありがとう-このプロジェクトは特に配布可能であるため、何も更新しようとするべきではありません-実際の更新はRPM(NPMではなくRPMである)で行われ、実際のnode_modulesはシュリンクラップされます- (私の
開発

回答:


167

Bashを使用している場合は、package.jsonファイルがあるフォルダーに切り替えて、以下を実行します。

for package in `ls node_modules`; do npm uninstall $package; done;

グローバルにインストールされたパッケージの場合は、%appdata%/npmフォルダーに切り替え(Windowsの場合)、同じコマンドを実行します。

編集:このコマンドはnpm 3.3.6(ノード5.0)で中断します。現在、次のBashコマンドを使用しています。これは、.bashrcファイルのnpm_uninstall_allにマップしています。

npm uninstall `ls -1 node_modules | tr '/\n' ' '`

ボーナスを追加しましたか?とても速いです!

https://github.com/npm/npm/issues/10187


1
「すべてのnpmモジュールをグローバルに削除するコマンド?」に対する回答とまったく同じコマンドを投稿しました。これは、その状況とこの状況の両方でどのように行うのが適切なのでしょうか。
2014年

@AndrewMedicoそれはどのように適切ではないのですか?package.jsonファイルにインストールされたパッケージは、node_modulesフォルダーにインストールされます。このコマンドは、すべてのサブフォルダーをnode_modulesフォルダーに移動しnpm uninstall <package>、各フォルダーに対して実行します。私はこれを自分で行いましたが、うまく機能します!
jedmao 14年

2
@UgoRobainいい質問です。結局のところ、いくつかの依存関係は非常に深くなっています。NTFSファイルシステム(Windows)では、少なくとも、パス名がなんらかの制限よりも長いディレクトリを削除すると問題が発生し、削除できない仮想ディレクトリが残ります。幸いなnpm uninstallことに、これで対処できるので、このトリックが役立ちます。
jedmao 2014

7
これが私がpowershellでそれを行うために使用したものです:foreach($package in ls node_modules){npm uninstall $package}
JustMaier

1
Windowsでは動作しないようです。tr is not recognized
Overdrivr

78

これは私のために働きました:

コマンドプロンプトまたはgitbashをプロジェクトのnode_modulesフォルダーに移動して、次を実行します。

npm uninstall *

そのプロジェクトのローカルパッケージをすべて削除しました。


これにより、グローバルインストールも削除されませんか?
しんぞう2018

@shinzouグローバルインストールは削除されませんでした。
テイラーエドミストン

1
Mac 10.13.5では、次のように多くのエラーがスローされます "> heapdump@0.3.9 install / Users / vikramanna / node_modules / heapdump> node-gyp rebuild CXX(target)Release / obj.target / addon / src / heapdump。 o ../src/heapdump.cc:17からインクルードされたファイル:../src/compat-inl.h:300:19:エラー: 'v8 :: Isolate'に 'GetCpuProfiler'という名前のメンバーがありませんreturn isolate-> GetCpuProfiler()-> StartProfiling(title、record_samples); "
vikramvi 2018年

35

Windowsの場合はnode_modules dirに移動し、これをPowerShellで実行します

npm uninstall (Get-ChildItem).Name 

私にとって、これは「コマンドラインが長すぎます」というエラーが発生します。
Daniel

29

私は最近、次のようにすべての開発依存関係をアンインストールできるようにするノードコマンドを見つけました。

npm prune --production

前述のように、このコマンドは開発依存パッケージのみをアンインストールします。少なくともそれは私が手動でそれをする必要がないことを助けました。


8

Windowsユーザー向けのヒント:node_modules親ディレクトリ内から次のPowerShellコマンドを実行します。

ls .\node_modules | % {npm uninstall $_}

6
// forcibly remove and reinstall all package dependencies
ren package.json package.json-bak
echo {} > package.json
npm prune
del package.json
ren package.json-bak package.json
npm i

これは基本的に偽の空のpackage.jsonを作成し、npm prunenode_modules内のすべてを削除する呼び出しを行い、元のpackage.jsonを復元してすべてを再インストールします。

他の解決策のいくつかはよりエレガントかもしれませんが、私はこれがより速くて完全であることを疑っています。他のスレッドでは、node_modulesディレクトリを削除することを提案している人がいますが、少なくともWindowsの場合、binディレクトリが見つからないため、これによりnpmが後で窒息します。たぶんLinuxでは正しく復元されますが、Windowsでは復元されません。


1
私の場合は-私はちょうど一緒に行ったので(..ので、NPMのスクリプトが実行された後にCI上でスクリプトを実行しているの)既存のpackage.jsonを必要としませんでした:「エコー{}> package.json&NPMプルーン」
リッキー

5

実際には、それを実行するオプションはありません。パッケージをアンインストールする場合は、依存して使用package.jsonnpm lsている同じディレクトリ上で、または削除するパッケージに対してのみ実行してください。package.jsonnpm uninstall <name>npm rm <name>


8
私はそれらを個別に削除する方法を知っています-npm installが動作するのと同じ方法でpackage.jsonファイルに対して実行するコマンドがあった場合、それはより理にかなっています。
qodeninja 2013年

いいえ、すべてのモジュールを手動でアンインストールしたくありません。
しんぞう2018

1
  1. package.jsonから不要な依存関係を削除する
  2. npm i

" npm i"は欠落しているdepをインストールするだけでなく、package.jsonに一致するようにnode_modulesを更新します


1

すべてを読むまで、これらの手順を複製しないでください

私にとって、言及された解決策はすべて機能しませんでした。私は/usr/libそこに行って走りました

for package in `ls node_modules`; do sudo npm uninstall $package; done;

しかし、それはまた、npmパッケージとパッケージの半分だけを削除しました(それが文字nに達するまで)。

そこで、ノードガイドを参考にノードを再インストールしてみました。

# Using Ubuntu
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs

しかし、npm再インストールされませんでした。

そこで、ノード全体を再 sudo apt-get remove nodejs インストールし、上記のガイドに従って再度インストールすることにしました。

現在、NPMは再び機能していますが、グローバルモジュールはまだ残っています。だから私はディレクトリの内容をチェックし、/usr/lib/node_modulesここで唯一重要なようですnpm。だから私は上のコマンドを編集して、npm

for package in $(ls node_modules); do if [ "$package" != "npm" ]; then sudo npm uninstall $package; fi; done;

接頭辞が付いていないモジュールはすべて削除されました@。Sooサブディレクトリのループを拡張しました。

for package in $(ls node_modules); do if [  ${package:0:1} = \@ ]; then 
        for innerPackage in $(ls node_modules/${package}); do
                sudo npm uninstall "$package/$innerPackage";
        done;
fi; done;

私は/usr/lib/node_modules今だけ含まれているnpmとパッケージをリンク。


0

そのためにループを実行する必要はありません。

単一のコマンドのみを使用して、すべてのnode_modulesを削除できます。

npm uninstall `ls -1 node_modules | tr '/\n' ' '`


0

VIKAS KOHLIjedmaoのピギーバックで、これを行うことができます

単一行バージョン:

npm uninstall `ls -1 node_modules | grep -v ^@ | tr '/\n' ' '` `find node_modules/@* -type d -depth 1 2>/dev/null | cut -d/ -f2-3 | tr '\n' ' '`

複数行バージョン:

npm uninstall \
`ls -1 node_modules | grep -v ^@ | tr '/\n' ' '` \
`find node_modules/@* -type d -depth 1 2>/dev/null | cut -d/ -f2-3 | tr '\n' ' '`

0

別の簡単なオプションは、node_modulesとpackage-lock.jsonを削除することです

rm -rf node_modules
rm -rf package-lock.json

この後、npmパッケージを再インストールしてみることができます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.