2017-09-27 13 views
2

개인 패키지, 공개 패키지의 변경된 포크 또는 공개 패키지의 다운 스트림으로 구성된 더 큰 NPM 패키지 라이브러리를 테스트하고 있습니다. 추가 NPM 패키지를 사용하지 않고 package.json에 쉘 스크립트에 특정 이름의 스크립트가 있는지 확인하십시오.

lib 
    |-package_1 
    |-package_2 
    |-package_N 

그래서 나는 각 디렉토리 npm test 명령에서 실행 내 패키지 lib 디렉토리를 통해 쉘 스크립트를 실행하고 있습니다.

for D in *; do 
    if [ -d "${D}" ]; then 
     echo "=================================" 
     echo "${D}" # PRINT DIRECTORY NAME 
     echo "=================================" 

     cd $D 
     npm run tests 
     cd ../ # LEAVE PACKAGE DIR 
    fi 
done 

불행히도 패키지의 JSON 파일에 tests-script의 이름을 지정하는 독특한 패턴이 없습니다. 일부 패키지는 test시계 모드의 스크립트로 실행되며 cli 스크립트 (주로 이름은 testcli)와 다릅니다. 만 두 가지 옵션이 존재하는지,

if has-testcli-script then 
    npm run testcli 
else 
    npm run test 

내가 지금 가정 : 내가하고 싶은 무엇

는 다음 의사 코드 같은 것입니다. 필자는 추가 글로벌 NPM 패키지를 설치하지 않고 스크립트가 있는지 여부를 파악하는 방법에 관심이 있습니다.

답변

2

최소한 npm 버전 2.11.4 이상이므로 인수가없는 npm run을 호출하면 실행 가능한 모든 스크립트가 나열됩니다. 이 스크립트를 사용하면 스크립트가 있는지 확인할 수 있습니다. 그래서 같은 :

has_testcli_script() { 
    [[ $(cat package.json | grep "^ \"testcli\":" | wc -l) > 0 ]] 
} 
: 또는

has_testcli_script() { 
    [[ $(npm run | grep "^ testcli" | wc -l) > 0 ]] 
} 

if has_testcli_script; then 
    npm run testcli 
else 
    npm test 
fi 

아니면, 그냥 스크립트가 직접 package.json 파일에 있는지 확인