fiskeben escreveu:
A desvantagem é que não é totalmente automático, ou seja, não extrai os nomes dos pacotes do package.json e os verifica. Você precisa fazer isso para cada pacote.
Vamos automatizar a resposta da Fiskeben se, por qualquer motivo, depchecknão estiver funcionando corretamente! (Por exemplo, eu tentei com o Typecript e deu erros de análise desnecessários)
Para análise package.json, podemos usar o software jq. O script de shell abaixo requer um nome de diretório por onde começar.
#!/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"
Primeiro, ele cria dois arquivos temporários onde podemos armazenar em cache nomes e arquivos de pacotes.
Começa com o findcomando A primeira e a segunda linha fazem com que ignore as pastas node_modulese build(ou o que você quiser). A terceira linha contém extensões permitidas, você pode adicionar mais aqui, por exemplo, arquivos JSX ou JSON.
Uma função lerá tipos dependentes.
Primeiro caté o package.json. Em seguida, jqobtém o grupo de dependência necessário. ( {} +existe para que ele não gere um erro se, por exemplo, não houver dependências entre pares no arquivo.)
Depois disso, sedextrai as partes entre as aspas, o nome do pacote. -ne .../pdiz para imprimir as partes correspondentes e nada mais da jqsaída JSON de. Em seguida, lemos esta lista de nomes de pacotes em um whileloop.
RESé o número de ocorrências do nome do pacote entre aspas. Agora é import/ require... 'package'/ "package". Ele faz o trabalho na maioria dos casos.
Então, simplesmente contamos o número de linhas de resultado e depois imprimimos o resultado.
Ressalvas:
- Não encontrará arquivos em diferentes importações, por exemplo,
tsconfig.jsonarquivos ( libopção)
- Você precisa
grepmanualmente apenas ^USEDe UNUSEDarquivos.
- É lento para grandes projetos - os scripts de shell geralmente não escalam bem. Mas espero que você não esteja executando tantas vezes.