回答:
depcheckと呼ばれるnpmモジュールを使用できます(少なくともノードのバージョン10が必要です)。
モジュールをインストールします。
npm install depcheck -g
or
yarn global add depcheck
それを実行して、未使用の依存関係を見つけます。
depcheck
このアプローチの良い点は、find
またはgrep
コマンドを覚えておく必要がないことです。
インストールせずに実行するには、npx を使用します。
npx depcheck
depcheck
すべてのパッケージをリストしていますが、unused
これは間違っています
というパッケージもありますnpm-check
:
npm-check
古く、正しくない、未使用の依存関係を確認します。
それは非常に強力で、積極的に開発されています。その1つは、未使用の依存関係をチェックする機能です。この部分ではdepcheck
、他の回答で言及されているモジュールを使用します。
npm outdated
現在、必要、最新のパッケージバージョンをチェックして一覧表示します。ただし、未使用のパッケージのリストはありません。
あなたはOSのようなUnixの(などのLinux、OSXを、)を使用しているなら、あなたはを組み合わせて使用することができますfind
し、egrep
あなたのパッケージ名を含む必要書類を検索します:
find . -path ./node_modules -prune -o -name "*.js" -exec egrep -ni 'name-of-package' {} \;
require('name-of-package')
ステートメント全体を検索する場合は、必ず正しいタイプの引用符を使用してください。
find . -path ./node_modules -prune -o -name "*.js" -exec egrep -ni 'require("name-of-package")' {} \;
または
find . -path ./node_modules -prune -o -name "*.js" -exec egrep -ni "require('name-of-package')" {} \;
欠点は、完全に自動化されていないpackage.json
ことです。つまり、パッケージ名が抽出されてチェックされません。これは、パッケージごとに自分で行う必要があります。以来package.json
ちょうどJSONで、これは使用しています小さなスクリプト書き込むことによって改善することができchild_process.exec
、それぞれの依存関係のため、このコマンドを実行することを。そして、それをモジュールにします。そして、それをNPMリポジトリに追加します...
.jsx
ファイルや.ts
ファイルなどはどうですか:D
フィスケベンは書きました:
欠点は、完全に自動化されていないことです。つまり、package.jsonからパッケージ名を抽出してチェックしません。これは、パッケージごとに自分で行う必要があります。
なんらかの理由depcheck
で正しく機能しない場合は、Fiskebenの回答を自動化しましょう。(例えば、私はTypescriptでそれを試しました、そしてそれは不必要な構文解析エラーを出しました)
解析package.json
にはソフトウェアを使用できますjq
。以下のシェルスクリプトには、開始するディレクトリ名が必要です。
#!/bin/bash
DIRNAME=${1:-.}
cd $DIRNAME
FILES=$(mktemp)
PACKAGES=$(mktemp)
find . \
-path ./node_modules -prune -or \
-path ./build -prune -or \
\( -name "*.ts" -or -name "*.js" -or -name "*.json" \) -print > $FILES
function check {
cat package.json \
| jq "{} + .$1 | keys" \
| sed -n 's/.*"\(.*\)".*/\1/p' > $PACKAGES
echo "--------------------------"
echo "Checking $1..."
while read PACKAGE
do
RES=$(cat $FILES | xargs -I {} egrep -i "(import|require).*['\"]$PACKAGE[\"']" '{}' | wc -l)
if [ $RES = 0 ]
then
echo -e "UNUSED\t\t $PACKAGE"
else
echo -e "USED ($RES)\t $PACKAGE"
fi
done < $PACKAGES
}
check "dependencies"
check "devDependencies"
check "peerDependencies"
まず、パッケージ名とファイルをキャッシュできる2つの一時ファイルを作成します。
find
コマンドから始まります。1行目と2行目では、node_modules
とbuild
フォルダー(または必要なもの)を無視します。3行目には許可された拡張子が含まれています。JSXまたはJSONファイルなど、ここにさらに追加できます。
関数は依存型を読み取ります。
最初cat
はpackage.json
です。次に、jq
必要な依存関係グループを取得します。({} +
たとえば、ファイルにピアの依存関係がない場合にエラーをスローしないようにするためです。)
その後sed
、引用符の間の部分、パッケージ名を抽出します。-n
そして、JSON出力.../p
から一致する部分のみをjq
出力するように指示します。次に、このパッケージ名のリストをwhile
ループに読み込みます。
RES
引用符で囲まれたパッケージ名の出現回数です。現在はimport
/ require
... 'package'
/ "package"
です。それはほとんどの場合に仕事をします。
次に、結果行の数を数え、結果を出力します。
警告:
tsconfig.json
(例:ファイル(lib
オプション))grep
のみ手動でする必要が^USED
ありUNUSED
ます。この目的のために、以下のnpmモジュールを使用できます。
ここでの答えの多くは、未使用のアイテムを見つける方法です。
自動的に削除したかった。
このノードプロジェクトをインストールします。
$ npm install -g typescript tslint tslint-etc
ルートディレクトリで、新しいファイルtslint-imports.jsonを追加します。
{
"extends": [
"tslint-etc"
],
"rules": {
"no-unused-declaration": true
}
}
あなた自身の責任でこれを実行し、バックアップを作成してください:)
$ tslint --config tslint-imports.json --fix --project .
npx depcheck --json | jq '.dependencies[]' | xargs -L1 npm rm