3장 manifest와 lockfile을 구분한다
package.json의 version range는 허용 범위를 표현한다. lockfile은 실제로 해석된 version과 transitive dependency를 고정한다. source만 같고 lockfile이 다르면 다른 artifact가 나올 수 있다.
실습 fixture:
"node_modules/clean-schema": {
"version": "2.1.0",
"license": "MIT"
}
CI에서는 clean install을 사용하고 lockfile 변경을 review한다. dependency를 추가했는데 lockfile이 바뀌지 않았거나, 사소한 수정인데 수백 package가 변경되면 이유를 확인한다. AI에게 “오류 고쳐 줘”라고 했더니 package manager를 바꾸거나 lockfile을 재생성하는 경우가 있다.
검토 순서:
- direct dependency를 왜 추가했는가?
- 표준 library나 기존 dependency로 해결할 수 없는가?
- package의 공식 registry·repository·maintainer가 일치하는가?
- transitive dependency 수와 install script가 늘었는가?
- version과 integrity가 lockfile에 고정됐는가?
- license와 지원 수명은 조직 정책에 맞는가?