package.json 파일에 더 이상 필요하지 않은 패키지가 있는지 확인하는 방법이 있습니까?
예를 들어 패키지를 시험 해보고 나중에 주석을 달거나 코드를 삭제하지만 제거를 잊어 버린 경우 삭제할 수있는 몇 가지 패키지가 생깁니다.
패키지를 안전하게 삭제할 수 있는지 확인하는 효율적인 방법은 무엇입니까?
답변
depcheck 라는 npm 모듈을 사용할 수 있습니다 (노드 버전 10 이상 필요).
- 
모듈을 설치하십시오 :
npm install depcheck -g or yarn global add depcheck - 
이를 실행하고 사용하지 않는 종속성을 찾으십시오.
depcheck 
이 방법의 좋은 점은 find또는 grep명령 을 기억할 필요가 없다는 것 입니다.
설치하지 않고 실행하려면 npx 를 사용하십시오.
npx depcheck
답변
다음과 같은 패키지도 있습니다 npm-check.
npm-check
오래되고 부정확하며 사용되지 않는 종속성을 확인하십시오.

그것은 매우 강력하고 적극적으로 개발되었습니다. 사용되지 않는 종속성을 확인하는 기능 중 하나입니다.이 부분에서는depcheck 다른 답변에서 언급 한 모듈을 .
답변
당신은 다음의 조합을 사용할 수 있습니다 (등 리눅스, OSX) OS와 같은 유닉스를 사용하는 경우 find와 egrep패키지 이름을 포함하는 문을 필요로를 검색 :
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.jsonJSON 이므로 child_process.exec각 종속성에 대해이 명령을 실행 하는 데 사용되는 작은 스크립트를 작성하여이를 해결할 수 있습니다 . 그리고 그것을 모듈로 만드십시오. 그리고 NPM 저장소에 추가하십시오 …
답변
fiskeben은 다음과 같이 썼습니다.
단점은 완전 자동적이지 않다는 것입니다. 즉 package.json에서 패키지 이름을 추출하여 확인하지 않습니다. 각 패키지마다이 작업을 수행해야합니다.
어떤 이유로 든 Fiskeben의 답변을 자동화하십시오 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의 S package.json. 그런 다음 jq필요한 종속성 그룹을 가져옵니다. ( {} +예 : 파일에 피어 종속성이없는 경우 오류가 발생하지 않도록하십시오.)
그런 sed다음 패키지 이름 인 따옴표 사이의 부분을 추출합니다. -n와 .../p일치하는 부품에서 아무것도 인쇄를 지시 jq의 JSON 출력을. 그런 다음이 패키지 이름 목록을 while루프 로 읽습니다 .
RES패키지 이름이 따옴표로 표시되는 횟수입니다. 지금 당장이야 import/ require… 'package'/"package" 입니다. 대부분의 경우 작업을 수행합니다.
그런 다음 결과 줄 수를 세고 결과를 인쇄합니다.
주의 사항 :
- 다른 가져 오기에서 파일을 찾을 수 없습니다 
tsconfig.json( 예 : 파일lib) - 당신은에있는 
grep경우에만 수동^USED및UNUSED파일. - 대규모 프로젝트의 경우 속도가 느립니다. 셸 스크립트는 종종 확장 성이 떨어집니다. 그러나 희망적으로 당신은 이것을 여러 번 실행하지 않을 것입니다.
 
답변
이 목적으로 아래 npm 모듈을 사용할 수 있습니다.
답변
여기에 많은 대답이 사용되지 않은 항목을 찾는 방법입니다.
나는 그들을 자동으로 제거하고 싶었다 .
- 
이 노드 프로젝트를 설치하십시오.
$ npm install -g typescript tslint tslint-etc 
- 
루트 디렉토리에서 새 파일 tslint-imports.json을 추가하십시오.
{
"extends": [
"tslint-etc"
],
"rules": {
"no-unused-declaration": true
}
} 
- 
위험 부담으로 실행하고 백업하십시오 🙂
$ tslint --config tslint-imports.json --fix --project . 
답변
