package.json 의존성 관리

이윤표·2024년 6월 25일
0

package.json

package.json은 Node.js 프로젝트에서 사용되는 설정 파일로 프로젝트의 메타데이터와 함께 프로젝트에 필요한 의존성 패키지들을 정의하는 역할을 한다. 주로 프로젝트 루트 디렉토리에 위치하며, JSON 형식으로 작성된다.

dependencies

package.json 파일에서 dependencies는 프로젝트가 정상적으로 동작하는 데 필요한 패키지와 모듈들을 정의하는 부분이다. 이 섹션에 나열된 패키지들은 npm install 명령어를 실행하면 자동으로 설치된다. 각 패키지는 이름과 버전으로 지정된다.

dependencies 에 존재하는 패키지들은 프로젝트가 실행될 때 반드시 필요한 패키지들이다.

"dependencies": {
  "express": "^4.17.1",
  "mongoose": "^5.10.7"
}.

💡 Please do not put test harnesses or transpilers or other "development" time tools in your dependencies object.

dependencies
에 테스트 하네스, 트랜스필러 또는 기타 "개발" 시간 도구를 넣지 마세요.

npm 공식 문서

devDependencies

devDependenciespackage.json 파일에서 프로젝트의 개발 환경에서만 필요한 패키지와 모듈들을 정의하는 섹션이다. 이 패키지들은 애플리케이션의 실제 실행에는 필요하지 않지만, 개발 및 테스트, 빌드 과정에서 필요하다.

보통 테스팅 프레임워크(jest), 빌드 도구(webpack), 린팅 도구(eslint), 개발 서버(nodemon) 등에 사용된다.

"devDependencies": {
  "jest": "^26.6.3",
  "eslint": "^7.10.0"
}

이 섹션에 있는 jesteslint 패키지는 개발 중에만 필요하고 실제 애플리케이션이 배포되고 실행될 때는 이 패키지들이 필요하지 않다.

devDependencies에 있는 패키지들이 설치되지 않기 위해서 다음 명령어를 실행하면 된다.

npm install --production

버전 범위 기호

package.json 파일에서 버전 범위를 나타내는 기호들이 존재한다. 주로 semver(Semantic Versioning)를 따르는 패키지의 버전을 지정할 때 사용된다.

💡 Semantic Versioning (semver)
버전을 MAJOR.MINOR.PATCH 형식으로 나타낸다. (주 버전.부 버전.수정 버전)

1. 기존 버전과 호환되지 않게 API가 바뀌면 MAJOR 을 올리고,
2. 기존 버전과 호환되면서 새로운 기능을 추가할 때는 MINOR 을 올리고,
3. 기존 버전과 호환되면서 버그를 수정한 것이라면 PATCH 을 올린다.

^ 기호

^ 기호는 주어진 버전과 호환되는 모든 새로운 버전을 허용한다는 의미이다. 구체적으로는 MAJOR 가 변경되지 않는 한, 가능한 최신 버전을 설치할 수 있게 한다.

💡 ex) ^4.17.1는 다음과 같은 의미를 갖는다.

  • 4.17.1 이상이면서 4.x.x 버전의 범위 내에서
  • 가능한 최신 버전 (즉, 주 버전 4가 유지되는 한 최신 버전)

~4.17.1 이 허용하는 버전과 아닌 버전 다음과 같다.

  • 4.17.1 4.17.2 4.18.0 4.19.3
  • 5.0.0 이상

~ 기호

~ 기호는 주어진 버전과 호환되는 수정 버전(PATCH) 업데이트만 허용합니다. 부 버전(MINOR)과 주 버전(MAJOR)은 고정된다.

💡 ex) ~4.17.1 은 다음과 같은 의미를 갖는다.

  • 4.17.1 이상이면서 4.17.x 버전의 범위 내에서
  • 가능한 최신 버전 (즉, 부 버전 17이 유지되는 한 수정 버전은 최신 버전 가능)

~4.17.1 이 허용하는 버전과 아닌 버전 다음과 같다.

  • 4.17.1 4.17.2 4.17.3
  • 4.18.0 이상

그 외 기호들

> 기호: 지정된 버전보다 높은 모든 버전을 허용한다.

💡 >4.17.1는 다음과 같은 의미를 갖는다.

  • 4.17.1 보다 높은 버전 (즉, 4.17.1 제외)

따라서, >4.17.1 이 허용하는 버전과 아닌 버전 다음과 같다.

  • 4.17.2 4.18.0
  • 5.0.0 4.17.1 , 그 이상

이 외에도 이와 비슷한 >=, < <= 가 있다.

의존성 범위

일반적으로 의존성의 범위는 가능한 한 좁게 설정하여 안정성과 예측 가능성을 높이는 것이 좋다. 그러나 특정한 경우에는 유연성을 제공하기 위해 넓은 범위를 사용할 수 있다.

"dependencies": {
  "express": "4.17.1" // 좁은 범위 예시
  "express": "^4.17.1" // 넓은 범위 예시
}
profile
프론트엔드 개발자 지망생

0개의 댓글