Найдите неиспользуемые пакеты npm в пакете.формат JSON



есть ли способ определить, есть ли у вас пакеты в вашем пакете.JSON-файл, который больше не нужен?



например, при попытке пакета и последующем комментировании или удалении кода, но забывая удалить его, я получаю пару пакетов, которые можно удалить.



каков был бы эффективный способ определить, можно ли безопасно удалить пакет?

1221   4  

4 ответов:

вы можете использовать модуль npm под названием depcheck.

  1. установить модуль:

    npm install depcheck -g
    
  2. запустите его и найдите неиспользуемые зависимости:

    depcheck
    

хорошая вещь об этом подходе является то, что вы не должны помнить find или .

существует также пакет под названием npm-check:

npm-check

проверьте наличие устаревших, неправильных и неиспользуемых зависимостей.

enter image description here

Он достаточно мощный и активно развивается. Одна из его функций-это проверка неиспользуемых зависимостей - для этой части он использует depcheck модуль, упомянутый в другом ответе.

если вы используете Unix-подобных ОС (Linux, OSX и т. д.), то вы можете использовать комбинацию find и egrep для поиска операторов require, содержащих имя вашего пакета:

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...

fiskeben писал:

недостатком является то, что он не полностью автоматический, т. е. он не извлекает имена пакетов из пакета.json и проверьте их. Вы должны сделать это для каждого пакета себе.

давайте сделаем ответ Фискебена автоматизированным, если по какой-либо причине depcheck не работает должным образом! (Например, я попробовал его с 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 "{} + . | keys" \
        | sed -n 's/.*"\(.*\)".*//p' > $PACKAGES

    echo "--------------------------"
    echo "Checking ..."
    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"

сначала он создает два временных файла, где мы можем кэшировать имена пакетов и файлов.

начинается с . Первая и вторая строки заставляют его игнорировать node_modules и build папки (или что угодно). Третья строка содержит разрешенные расширения, вы можете добавить больше здесь, например, файлы JSX или JSON.

функция будет читать dependendy типы.

сначала catС package.json. Тогда,jq получает необходимую группу зависимостей. ({} + есть ли так, что он не будет выдавать ошибку, если, например, нет одноранговых зависимостей в файле.)

после этого, sed извлекает части между кавычками, имя пакета. -n и .../p говорит ему, чтобы напечатать соответствующие части и ничего больше от jqвыход JSON. Затем мы читаем этот список имен пакетов в while петля.

RES - число вхождений имени пакета в кавычках. Прямо сейчас это import/require ... 'package'/"package". Это делает работу в большинстве случаев.

затем мы просто подсчитываем количество строк результата, а затем печатаем результат.

предостережения:

  • не найдет файлы в разных импортах, например tsconfig.json файлы ()
  • вы должны grep вручную для только ^USED и UNUSED файлы.
  • это медленно для больших проектов - скрипты часто не масштабируется. Но, надеюсь, вы не будете работать так много раз.

Comments

    Ничего не найдено.