기본 구조
package.json
- npm을 사용하는 프로젝트의 메타데이터와 함께 의존성을 정의하는 파일
- npm init 명령어를 통해 초기화할 수 있으며, 기본적인 형태는 아래와 같다
{
"name": "my-project",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \\"Error: no test specified\\" && exit 1"
},
"dependencies": {
"express": "^4.17.1",
"mongoose": "^5.10.9"
},
"devDependencies": {
"eslint": "^7.11.0",
"jest": "^26.6.0",
"prettier": "^2.1.2"
}
"repository": {
"type": "git",
"url": "git+https://github.com/user/my-project.git"
},
"keywords": [],
"author": "",
"license": "ISC",
"bugs": {
"url": "<https://github.com/user/my-project/issues>"
},
"homepage": "<https://github.com/user/my-project#readme>"
}
version
- {Major}.{Minor}.{Patch} 포맷으로 지정한다
- Major : 하위 호환이 되지 않는 변경 사항
- Minor : 하위 호환이 되는 변경 사항
- Patch : 하위 호환 + 버그 수정
dependencies, devDependencies
- 실제 프로젝트에 관리할 모듈 패키지들을 명시한다
- dependencies는 프로젝트가 실행될 때 필수적으로 있어야 할 패키지들을 명시한다
- devDependencies는 꼭 필요하진 않고, 개발 환경, 테스트에서만 필요한 패키지들을 명시한다, 보통은 테스트 프레임워크 또는 포맷터 라이브러리를 명시한다
- 패키지 버전을 표기할 때 기호에 따라 명시할 수 있는데, 아래와 같다
- 틸트 ~ : 해당 패키지의 Patch 레벨만 허용, ex) ~4.3.0 은 4.3.x 버전만 허용
- 캐럿 ^ : 해당 패키지의 Minor 레벨까지 허용, ex) ^2.6.11 은 2.x.x. 버전 허용
node_modules
- 프로젝트에 명시한 패키지들이 실제 저장되는 디렉토리
- npm install로 설치 명령어를 수행하면 자동으로 생성된다
package-lock.json
- 패키지를 설치하다 보면 package-lock.json 파일이 같이 생기는데, node_modules 디렉토리에서 서로 다른 패키지들을 설치하지 않게 하기 위한 잠금 파일인 셈이다