[Node.js] package.json

cabbage·2023년 1월 17일
0

Node.js

목록 보기
4/7
post-thumbnail

package.json

  • 프로젝트의 루트 디렉토리에 위치하는 JSON 파일
  • 프로젝트에 대한 메타데이터, 패키지 버전과 같은 기능적 메타데이터, 애플리케이션에서 필요한 의존성 리스트 포함

package.json 파일의 목적

  • package.json은 애플리케이션과 상호작용하고 애플리케이션을 동작하는 방법을 구성하고 설명하는 파일
  • npm 또는 yarn CLI를 사용해 프로젝트를 정의하고 프로젝트의 의존성을 다룰 수 있게 해주는 파일
  • npm 또는 yarn이 프로젝트를 시작하고, 스크립트를 읽고, 의존성들을 설치하고, NPM 레지스트리에 퍼블리시하는 것들을 가능하게 해줌

package.json 파일의 공통 필드

package.json 파일의 여러 필드를 알고 있으면 이 파일의 사용 방법과 관리 방법에 대해 더 잘 이해할 수 있다.

name 필드

"name": "my-project"
  • name 필드는 패키지의 이름을 정의함
  • NPM 레지스트리에 패키지를 퍼블리싱하는 경우
    • name 필드의 값이 패키지에 리스트됨
    • name 프로퍼티는 필수적이고 유일해야 함
  • NPM 레지스트리에서 현재 사용 중인 이름이라면 패키지를 퍼블리싱할 때 에러가 발생함
  • 퍼블리시할 패키지가 아니라면 name은 유일하지 않아도 됨

version 필드

"version": "1.5.0"
  • version 필드는 퍼블리시된 패키지나 퍼블리시되기 전의 패키지에게 아주 중요한 필드
  • package.json 파일이 설명하는 현재 소프트웨어 버전을 나타냄
  • SemVer를 반드시 사용할 필요는 없지만, Node.js 생태계에서 표준적으로 사용되므로 사용하는 것이 좋음
  • 퍼블리시하지 않을 패키지라면 필수적이지 않음

license 필드

  • license 필드를 사용하면 package.json 파일이 설명하는 코드에 적용되는 라이센스를 정의할 수 있음
  • NPM 레지스트리에 퍼블리시하는 경우에 아주 중요함
  • 일부 개발자들이나 조직에서 소프트웨어를 사용하는 것을 제한할 수 있음
  • 명확한 라이센스가 있으면 소프트웨어를 사용할 수 있는 조건을 명확하게 정의하는 데 도움이 됨

author, contributors

"author": "Jon Church jon@example.com https://www.osioslabs.com/#team",
"contributors": [{
	"name": "Amber Matz",
	"email": "example@example.com",
	"url": "https://www.osiolabs.com/#team"
}],
  • author와 contributors 필드의 기능은 비슷함
  • 두 필드 모두 "사람"에 대한 정보를 적는 필드로, 이름 <이메일> <url> 형식의 문자열을 값으로 사용하고, 이메일과 url은 선택적임
  • author는 한 사람을 위한 필드, contributors는 여러 사람을 위한 필드
  • 퍼블릭 프로젝트에 대한 연락처를 나열하기에 유용한 필드

description 필드

  • description 필드는 NPM 레지스트리에 퍼블리시된 패키지를 위해 사용됨
  • npm.js에서 패키지를 설명하는 필드
  • 유저들이 NPM 레지스트리를 검색할 때 패키지가 무엇인지를 설명함
  • NPM 레지스트리에 퍼블리시하지 않더라도 프로젝트에 대한 간단한 문서 역할을 할 수 있음

keywords 필드

"keywords": ["server", "osiolabs", "express", "compression"]
  • keywords 필드는 description 필드와 비슷한 목적을 가짐
  • NPM 레지스트리에서 인덱스되어 패키지를 찾는 사람들에게 도움을 줌
  • NPM 레지스트리에 퍼블리시하지 않을거라면 생략 가능

main 필드

"main": "src/index.js",
  • main 필드는 프로젝트의 진입점을 정의함
  • 프로젝트의 진입점이란 프로젝트를 시작하기 위해 사용되는 파일을 의미함
  • 일반적으로 프로젝트의 루트에 있는 index.js 파일이 프로젝트의 진입점

scripts 필드

"scripts": {
	"start": "node index.js",
	"dev": "nodemon"
}
  • sciprts 필드는 npm run <스크립트이름> 형식으로 실행할 수 있는 스크립트를 키로 가지고 있는 객체이고, 그 값은 실행할 실제 명령어임
  • 일반적으로 터미널 명령어로, scripts 필드에 넣어 쉽게 재사용할 수 있음

repository 필드

"repository": {
	"type": "git",
	"url": "https://github.com/osiolabs/example.git"
}
  • repository 필드는 프로젝트의 코드가 있는 저장소에 대한 필드
  • 소스코드가 위치한 url을 정의하고, 어떤 버전 컨트롤 시스템을 사용하는지를 객체로 저장함

dependencies 필드

"dependencies": {
	"express": "^4.16.4",
    "compression": "~1.7.4"
}
  • dependencies 필드는 프로젝트가 사용하는 모든 의존성을 나열하는 필드
  • 패키지를 설치하면 node_modules 폴더에 다운로드되고, 패키지의 이름과 버전이 dependencies 프로퍼티에 추가됨
  • 패키지 이름을 키로, 버전이나 버전 범위를 값으로 갖는 객체를 저장함
  • 이 리스트를 통해 npm은 어떤 패키지를 가져와 설치할지를 알 수 있음
    (npm install 명령어 사용 시)
  • SemVer 사용: ^~를 사용해 버전 범위를 나타냄

devDependencies 필드

"devDependencies": {
	"nodemon": "^1.18.11"
}
  • dependencies 필드와 유사하지만, 개발 중에만 필요한 패키지를 위한 필드
  • nodemon과 같이 개발 중에 프로젝트를 다시 로드하는 툴의 경우 애플리케이션이 배포되면 필요하지 않음
  • 패키지를 devDependency로 설치하려면 npm install --save-dev <패키지이름>를 사용함

package.json 관리하기

  • package.json 파일은 반드시 유효한 JSON 파일이어야 함
  • 가능하다면 package.json을 관리하고 업데이트하기 위해 npm CLI를 사용하는 것이 좋음
  • npm CLI를 사용하면 의존성도 더 쉽게 관리할 수 있음
  • npm init 또는 yarn init을 사용하면 package.json 파일을 생성할 수 있음
  • npm CLI를 사용하는 것이 의존성을 가장 잘 관리할 수 있는데, package.jsonnode_modules 폴더의 동기화를 유지할 수 있기 때문
  • package.json에 의존성을 기록하고, node_modules 폴더에는 의존성에 대한 실제 코드가 설치되기 때문에, package.jsondependency 필드를 수동으로 업데이트하면 node_modules 폴더에 즉각적으로 변경 사항을 반영할 수 없음
  • 따라서 package.jsonnode_modules를 동시에 업데이트하려면 npm을 사용해 의존성을 관리하는 것이 좋음

참고

profile
캐비지 개발 블로그입니다. :)

0개의 댓글

관련 채용 정보