fiskeben đã viết:
Nhược điểm là nó không hoàn toàn tự động, tức là nó không trích xuất tên gói từ gói.json và kiểm tra chúng. Bạn cần phải làm điều này cho mỗi gói mình.
Hãy tự động trả lời câu trả lời của Fiskeben nếu vì lý do nào đó depcheck
không hoạt động đúng! (Ví dụ: tôi đã thử nó với Typecript và nó đã đưa ra các lỗi phân tích không cần thiết)
Để phân tích cú pháp package.json
chúng ta có thể sử dụng phần mềm jq
. Kịch bản shell dưới đây yêu cầu một tên thư mục bắt đầu từ đâu.
#!/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"
Đầu tiên, nó tạo ra hai tệp tạm thời nơi chúng ta có thể lưu trữ tên gói và tệp.
Nó bắt đầu với find
lệnh. Dòng đầu tiên và thứ hai làm cho nó bỏ qua node_modules
và build
các thư mục (hoặc bất cứ điều gì bạn muốn). Dòng thứ ba chứa các phần mở rộng được phép, bạn có thể thêm nhiều hơn ở đây, ví dụ như các tệp JSX hoặc JSON.
Một chức năng sẽ đọc các loại phụ thuộc.
Đầu tiên, nó cat
là package.json
. Sau đó, jq
được nhóm phụ thuộc cần thiết. ( {} +
ở đó để nó không gây ra lỗi nếu ví dụ: không có phụ thuộc ngang hàng trong tệp.)
Sau đó, sed
trích xuất các phần giữa các dấu ngoặc kép, tên gói. -n
và .../p
bảo nó in các phần phù hợp và không có gì khác từ jq
đầu ra JSON của. Sau đó chúng tôi đọc danh sách các tên gói thành một while
vòng lặp.
RES
là số lần xuất hiện của tên gói trong ngoặc kép. Ngay bây giờ, nó là import
/ require
... 'package'
/ "package"
. Nó làm công việc cho hầu hết các trường hợp.
Sau đó, chúng tôi chỉ cần đếm số dòng kết quả sau đó in kết quả.
Hãy cẩn thận:
- Không tìm thấy tệp trong các lần nhập khác nhau, ví dụ:
tsconfig.json
tệp ( lib
tùy chọn)
- Bạn phải
grep
thủ công cho chỉ ^USED
và UNUSED
các tập tin.
- Nó chậm đối với các dự án lớn - kịch bản shell thường không có quy mô tốt. Nhưng hy vọng bạn sẽ không chạy nó nhiều lần.