fiskeben пише:
Мінус полягає в тому, що він не є повністю автоматичним, тобто він не вилучає імена пакунків з package.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 "{} + .$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"
Спочатку він створює два тимчасові файли, де ми можемо кешувати назви пакетів та файли.
Починається з find
команди. Перший і другий рядок змушують ігнорувати папки node_modules
та build
(або все, що завгодно). Третій рядок містить дозволені розширення, сюди ви можете додати більше, наприклад файли JSX або JSON.
Функція буде читати залежні типи.
Спочатку це cat
вляет package.json
. Потім jq
отримує необхідну групу залежності. ( {} +
чи існує так, що вона не видасть помилку, якщо, наприклад, у файлі немає рівних залежностей.)
Після цього sed
витягує частини між цитатами, назва пакета. -n
і дозволяє .../p
йому друкувати відповідні частини та нічого іншого з jq
виходу JSON 's. Потім ми читаємо цей список назв пакетів у while
циклі.
RES
- кількість зустріч імені пакета в лапках. Зараз це import
/ require
... 'package'
/ "package"
. Це робить роботу в більшості випадків.
Тоді ми просто підраховуємо кількість рядків результатів, після чого друкуємо результат.
Застереження:
- Не знайдемо файлів у різному імпорті, наприклад
tsconfig.json
файлів (lib
опція)
- Ви повинні
grep
вручну лише ^USED
та UNUSED
файли.
- Для великих проектів це повільно - сценарії оболонки часто не дуже масштабні. Але, сподіваємось, ви не будете працювати так багато разів.