8.03 Dev.Feedback (Package.json)
여러 과제들을 진행할 때 매번 보게되는 파일이었지만, 이 파일이 어떤 역할을 하는지, 그리고 각 코드가 어떤 의미인지 정확하게 알지 못했다. 이게 무엇인지 물어봤을 때, 어떤 역할을 하는지 전혀 모르고 있다는 것을 알게되어 정리한다.
package.json
노드로 확장 모듈을 작성하면 npm을 통해 중앙 저장소로 배포할 수 있다. package.json 파일은 배포한 모듈 정보를 담고자 만들어졌지만, 노드로 작성하는 애플리케이션도 package.json 파일을 사용하여 관리할 수 있다. 꼭 확장 모듈 형태로 배포하기 위한 것이 아니더라도 애플리케이션을 개발할 때 package.json 파일을 이용하면 사용하는 확장 모듈에 대한 의존성 관리가 가능하기 때문에 편리하다.
즉 package.json은 우리가 협업을 하기 위해 알아야만 하는 여러 정보들을 담은 것이고, 그 중 우리가 포인트를 두어야 하는 것은 dependencies에 있다. npm install을 하게되면 package.json의 dependencies에 적혀 있는 모듈들을 읽어서 Node Package Manager라는 필요한 모듈을 다운로드할 수 있는 일종의 앱스토어에서 그에 맞는 모듈을 찾아 node.modules에 저장해준다. dependencies외에 다양한 목록들을 아래에 정리한다.
{
"name" : "test",
"description" : "javascript's test programming.",
"keywords" : ["util", "f", "server", "client", "browser"],
"author" : "happydrum",
"contributors" : [],
"dependencies" : [],
"repository" : {"type": "git", "url" : "git://gitbub.com/documentcloud/test.git" },
"main" : "test.js",
"version" : "1.1.6"
}
name
프로젝트 이름으로, 가장 중요하다. 중앙 저장소에 배포할 때 version과 함께 필수 항목으로 다룬다. 이름을 짓는데 혹시나 겹치는 걸 방지하기 위해 https://www.npmjs.com/ 사이트에서 찾아보는 걸 추천하기도 한다. (혹시 겹칠 경우를 대비하여) 일반적으로 require() 함수의 인수로 사용되기 때문에 짧고 알기 쉬운 것으로 짓는 것이 좋다.
이름을 지을 때 주의사항들이 있다.
- url로 사용되고, 설치할 때 디렉토리 이름이 되기 때문에 url이나 디렉터리에서 쓸 수 없는 이름을 사용하면 안된다.
- 이름에 node나 js가 들어가면 안된다.
- 214자보다 짧아야 하며, 점(.)이나 밑줄(_)로 시작할 수 없다.
- 대문자를 포함하면 안된다.
version
프로젝트 버전을 정의한다. 3단계 버전을 사용하며, - 로 태그 이름을 적을 수 있다.
description
프로젝트 설명으로, 문자열로 작성한다. npm search로 검색된 리스트에 표시되기 때문에 협업을 위해 사람들이 패키지를 찾아내고 이해하는 데 도움을 주는 항목이다.
keywords
프로젝트를 검색할 때 참조되는 키워드이다. description과 마찬가지로 npm search로 검색된 리스트에 표시되고, 하는 역할도 비슷하다.
homepage
프로젝트 홈페이지 주소이다. url 항목과는 다르며, url을 설정하면 예상치 못한 움직임을 하게 되므로 주의해야 한다.
author
프로젝트 작성자 정보로, 한 사람만을 지정한다. JSON 형식으로 name, email, url 옵션을 포함한다.
contributors
프로젝트에 참여한 공헌자 정보로, 여러 사람을 배열로 지정할 수 있다.
repository
프로젝트의 소스 코드를 저장한 저장소의 정보. 소스 코드에 참여하고자 하는 사람들이 참고할만한 여러 정보들을 제공할 수 있는 항목, 프로젝트의 홈페이지 url을 명시하지 않고, 참고할 수 있는 소스에 대한 레포를 제공하는 것이 중요하다.
scripts
프로젝트에서 자주 실행해야 하는 명령어를 scripts로 작성해두면 npm 명령어로 실행 가능하다. 지금 내가 사용하는 것에는 npm run start, npm run test 등등이 있다.
config
소스 코드에서 config 필드에 있는 값을 환경 변수처럼 사용할 수 있다.
private
이 값을 true로 작성하면 중앙 저장소로 저장하지 않는다.
dependencies
프로젝트 의존성 관리를 위한 부분이다. 이 프로젝트가 어떤 확장 모듈을 요구하는지 정리할 수 있는 항목이다. 일반적으로 package.json에서 가장 많은 정보가 입력되는 곳이다. 애플리케이션을 설치할 때 이 내용을 참조하여 필요한 확장 모듈을 자동으로 설치한다. 따라서 개발한 애플리케이션이 특정한 확장 모듈을 사용한다면 여기에 꼭 명시를 해주어야 한다. 또한, npm install 명령은 여기에 포함된 모든 확장 모듈들을 설치하게 되어 있다. 외에 버전을 어떤식으로 작성해야 하는지 url, repo는 어떤식으로 넣는지에 대한 정보들을 다룰 수 있는데, 아래 링크를 통해서 더욱 디테일하게 작성할 수 있다.
https://docs.npmjs.com/cli/v7/configuring-npm/package-json#dependencies
package.json | npm Docs
Specifics of npm's package.json handling
docs.npmjs.com
devDependencies
개발할 때만 의존하는 확장 모듈을 관리하게 해주는 항목, 우리가 개발을 위해 사용한 테스트 모듈 혹은 우리가 배포한 앱이나 홈페이지를 실제 구현할 때 쓰지 않지만, 개발할 때 쓰는 모듈들을 따로 보이지 않는 항목으로 분류하여 저장하게 해준다.
engine
실행 가능한 노드 버전의 범위를 결정해주는 항목.