Найдите неиспользуемые пакеты npm в пакете.формат JSON
есть ли способ определить, есть ли у вас пакеты в вашем пакете.JSON-файл, который больше не нужен?
например, при попытке пакета и последующем комментировании или удалении кода, но забывая удалить его, я получаю пару пакетов, которые можно удалить.
каков был бы эффективный способ определить, можно ли безопасно удалить пакет?
4 ответов:
вы можете использовать модуль npm под названием depcheck.
установить модуль:
npm install depcheck -gзапустите его и найдите неиспользуемые зависимости:
depcheckхорошая вещь об этом подходе является то, что вы не должны помнить
findили .
существует также пакет под названием
npm-check:npm-check
проверьте наличие устаревших, неправильных и неиспользуемых зависимостей.
Он достаточно мощный и активно развивается. Одна из его функций-это проверка неиспользуемых зависимостей - для этой части он использует
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