패키지 잠금 파일

minidoo·2024년 10월 10일
0

자바스크립트 / NodeJS

목록 보기
28/28
post-thumbnail

package.json

// package.json
{
	"dependencies": {
    "react": "^17.0.0",
    "react-dom": "^17.0.0"
  },
	"devDependencies": {},
	"peerDependencies": {
		"react": "^17.0.0"
	}
}
  1. dependencies
  • 애플리케이션 동작과 직접적으로 연결된 패키지
  • 런타임(실행) 시 필요한 패키지
  1. devDependencies
  • 개발할 때 필요한 라이브러리
  • 실제 배포할 때 포함되지 않기 때문에 빌드 시간을 줄일 수 있다. (빌드 안함)
  • 예 ) ESLint, Prettier, Webpack, Jest, Storybook 등
  1. peerDependencies
  • 프로젝트를 패키지 형태로 배포할 때 필요한 라이브러리
  • 해당 프로젝트를 사용하게 될 프로젝트에게 peerDependencies에 있는 버전을 사용하도록 해주는 것과 같다.
node_modules
ㄴreact ^16.0.0 (dependancy)
ㄴexample_01_project ^0.0.1 (dependancy)
  ㄴnode_modules
    ㄴreact ^17.0.0 (peer dependancy)
  • example_02_project 프로젝트는 dependancy로 react 16.0.0 버전이 설치되어 있다. 그러나 example_02_project에서 사용하는 example_01_project 버전 0.0.1에 설치된 react 버전은 17.0.0 이기 때문에 경고 메시지가 나올 것이다. (yarn의 경우)
    example_01_project@0.0.1" has incorrect peer dependency "react@^17.0.0".

package-lock.json / yarn.lock

프로젝트에서 사용하는 패키지들의 버전을 고정 시켜 준다.

패키지 잠금 파일이 없다면?

// package.json
{
	"dependencies": {
		"react": "^18.0.0"
	}
}
  • 개발자 A: 18.0.1
  • 개발자 B: 18.0.2
  • 개발자 C: 18.1.0

만약 18.1.0 버전부터 새로운 Hook이 생성되었다고 한다면 개발자 A와 개발자 B는 에러가 뜨면서 버그가 발생한다. 이전 버전에는 새로운 Hook이 없기 때문이다.

필요한 이유

패키지 잠금 파일은 프로젝트에 패키지를 설치하는 시점의 버전을 고정해 놓기 때문에 새로운 개발자가 clone 후, yarn install 을 해도 패키지 잠금 파일에 있는 버전이 설치된다.

따라서 git에 프로젝트를 업로드할 때는 패키지 잠금 파일을 포함해서 올리는 것을 추천한다.

0개의 댓글