641 Stimmen

Wie finde ich unbenutzte Pakete in package.json?

Gibt es eine Möglichkeit festzustellen, ob sich Pakete in Ihrer package.json-Datei befinden, die nicht mehr benötigt werden?

Zum Beispiel, wenn Sie ein Paket ausprobieren und später Code kommentieren oder löschen, aber vergessen, es zu deinstallieren, habe ich am Ende ein paar Pakete, die gelöscht werden könnten.

Was wäre eine effiziente Möglichkeit festzustellen, ob ein Paket sicher gelöscht werden kann?

800voto

German Attanasio Punkte 19503

Sie können ein npm-Modul namens depcheck verwenden (erfordert mindestens Version 10 von Node).

  1. Installieren Sie das Modul:

     npm install depcheck -g
    
     oder
    
     yarn global add depcheck
  2. Führen Sie es aus und finden Sie die nicht verwendeten Abhängigkeiten:

     depcheck

Das Gute an diesem Ansatz ist, dass Sie sich nicht an den find oder grep Befehl erinnern müssen.

Um es ohne Installation auszuführen, verwenden Sie npx:

npx depcheck

201voto

alecxe Punkte 437954

Es gibt auch ein Paket namens npm-check:

npm-check

Überprüfen Sie veraltete, falsche und ungenutzte Abhängigkeiten.

Bildbeschreibung hier eingeben

Es ist ziemlich leistungsstark und aktiv entwickelt. Eine seiner Funktionen ist die Überprüfung ungenutzter Abhängigkeiten - für diesen Teil verwendet es das depcheck Modul, das in der anderen Antwort erwähnt wurde.

73voto

Sathia Punkte 6348

Überprüfen Sie die ungebrauchten Abhängigkeiten

npm install depcheck -g
depcheck

enter image description here

Überprüfen Sie die veraltete Bibliothek

npm outdated

enter image description here

16voto

mMo Punkte 163

Das Skript von gombosg ist viel besser als npm-check.
Ich habe es ein wenig modifiziert, damit auch devDependencies in node_modules gefunden werden.
Beispiel sass wird nie verwendet, aber benötigt in sass-loader

#!/bin/bash
DIRNAME=${1:-.}
cd $DIRNAME

FILES=$(mktemp)
PACKAGES=$(mktemp)

# use fd
# https://github.com/sharkdp/fd

function check {
    cat package.json \
        | jq "{} + .$1 | keys" \
        | sed -n 's/.*"\(.*\)".*/\1/p' > $PACKAGES
    echo "--------------------------"
    echo "Überprüfung von $1..."
    fd '(js|ts|json)$' -t f > $FILES
    while read PACKAGE
    do
        if [ -d "node_modules/${PACKAGE}" ]; then
            fd  -t f '(js|ts|json)$' node_modules/${PACKAGE} >> $FILES
        fi
        RES=$(cat $FILES | xargs -I {} egrep -i "(import|require|loader|plugins|${PACKAGE}).*['\"](${PACKAGE}|.?\d+)[\"']" '{}' | wc -l)

        if [ $RES = 0 ]
        then
            echo -e "UNBENUTZT\t\t $PACKAGE"
        else
            echo -e "VERWENDET ($RES)\t $PACKAGE"
        fi
    done < $PACKAGES
}

check "dependencies"
check "devDependencies"
check "peerDependencies"

Ergebnis mit dem originalen Skript:

--------------------------
Überprüfung von dependencies...
UNBENUTZT           jquery
--------------------------
Überprüfung von devDependencies...
UNBENUTZT           @types/jquery
UNBENUTZT           @types/jqueryui
VERWENDET (1)       autoprefixer
VERWENDET (1)       awesome-typescript-loader
VERWENDET (1)       cache-loader
VERWENDET (1)       css-loader
VERWENDET (1)       d3
VERWENDET (1)       mini-css-extract-plugin
VERWENDET (1)       postcss-loader
UNBENUTZT           sass
VERWENDET (1)       sass-loader
VERWENDET (1)       terser-webpack-plugin
UNBENUTZT           typescript
UNBENUTZT           webpack
UNBENUTZT           webpack-cli
VERWENDET (1)       webpack-fix-style-only-entries

und das modifizierte:

Überprüfung von dependencies...
VERWENDET (5)       jquery
--------------------------
Überprüfung von devDependencies...
UNBENUTZT           @types/jquery
UNBENUTZT           @types/jqueryui
VERWENDET (1)       autoprefixer
VERWENDET (1)       awesome-typescript-loader
VERWENDET (1)       cache-loader
VERWENDET (1)       css-loader
VERWENDET (2)       d3
VERWENDET (1)       mini-css-extract-plugin
VERWENDET (1)       postcss-loader
VERWENDET (3)       sass
VERWENDET (1)       sass-loader
VERWENDET (1)       terser-webpack-plugin
VERWENDET (16)      typescript
VERWENDET (16)      webpack
VERWENDET (2)       webpack-cli
VERWENDET (2)       webpack-fix-style-only-entries

16voto

Transformer Punkte 6100

Viele der Antworten hier beschäftigen sich nur damit, wie man ungenutzte Elemente findet. Was ist, wenn... Ich die ungenutzten Elemente automatisch finden und entfernen möchte?

Option 2, unten scheint der neuere Weg zu sein.


Option 1:

  1. Installiere dieses Node-Projekt.

    $ npm install -g typescript tslint tslint-etc


  1. Füge im Stammverzeichnis eine neue Datei tslint-imports.json hinzu.

    { "extends": [ "tslint-etc" ], "rules": { "no-unused-declaration": true } }


  1. Führe dies auf eigene Gefahr aus, mache am besten ein Backup :)

    $ tslint --config tslint-imports.json --fix --project .


Option 2 (nach Vorschlägen von @Alex & @JacopKane, danke):

// neuere Einzeiler-Option
npx depcheck --json | jq '.dependencies[]' | xargs -L1 npm rm

// oder
npm uninstall $(npx depcheck --oneline)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X