LHJ

I'm a FE developer.

의존성 취약 모듈 업데이트2

23 Sep 2020 » node_module

의존성 취약 모듈 업데이트2

우선 다음과 같은 방법으로 최대한 의존성 취약모듈 에러를 해결한다.

npm audit fix

문제 갯수가 최소화될 때까지 실행하자.
안되면 npm 모듈 버전을 업데이트한다.

npm outdated

버전을 확인한 후, 최신 버전으로 업그레이드한다.
이때 major version / minor version / patch version 개념을 알아야된다.
1.2.3 버전일 때 1이 메이저버전(주 버전) / 2가 마이너버전(부 버전) / 3이 패치버전(수 버전)이다.

해당 버전을 npm 규칙에 의해 짓는다면, 다음과 같은 규칙을 따른다. 메이저버전이 다르면 서로 호환이 안된다.
보통 대규모 업데이트가 있을 때 주버전이 바뀐다. 마이너버전은 서로 호환은 되는 작은 기능들을 패치했을 경우다.
패치버전은 자잘한 버그들을 수정했을 때 올라간다.

이와 같은 개념 말고도 0점대 버전은 아직 정규 출시 전이라, 0점대 버전은 위와 같은 규칙을 안 따르는 경우도 있다.

여튼 이러한 개념을 머리에 넣어두고 npm outdated로 모듈 버전을 확인해 최신 버전으로 업데이트하자.
그리고 다시

npm audit fix

명령어를 실행하면 취약 모듈 오류가 많이 줄었을 것이다. 더 이상 안 준다면 다음 명령어를 실행하자.

npm audit

그러면 어떻게 해결하라던지 그런 설명글들이 뜰 것이다.
어디 페이지 들어가서 몇 버전을 설치하라던지 참고하라는 식의 정보들도 뜬다.
이를 최대한 활용해 취약 모듈 개수를 줄이도록 하자.

하지만 끝까지 다음과 같은 메시지가 뜨면서 해결 안되는 의존성 취약 모듈이 있다.

updated 2 packages in 3.756s
fixed 114 of 144 vulnerabilities in 1713 scanned packages
  30 vulnerabilities required manual review and could not be updated

이럴 경우엔 package.json에 조치를 취해줘야된다.

{
  "scripts": {
    "preinstall": "npx npm-force-resolutions"
  },
  "resolutions": {
    "yargs-parser": "^18.1.2",
    "minimist": "^1.2.3",
    "braces": "^2.3.1",
    "cryptiles": "^4.1.2",
    "stringstream": "^0.0.6",
    "hoek": "^5.0.3",
    "kind-of": "^6.0.3",
    "jpeg-js": "^0.4.0",
    "lodash.template": "^4.5.0"
  },
}

바로 이렇게말이다.

npm audit을 통해 뜨는 패키지를 위와 같이 나열하고 권장 버전을 캐럿형태로 적어준다.
그리고 scripts 키에 해당 명령어를 입력하고 실행한다.

npm run preinstall
npm audit fix

그럼 해결되는 걸 확인할 수 있다.