
package.json이란?
package.json 파일은 JavaScript 프로젝트, 특히 Node.js 기반 프로젝트에서 핵심적인 역할을 하는 파일입니다. 이 파일은 프로젝트의 메타데이터를 포함한다.제대로 알아보기전에는 단순히 package.json은 npm을 관리하는 파이썬으로 따지면 requirement 같은 느낌으로 이해하고 있었다. 우선 해당 파일을 알아보기 전에 npm이 무엇인지부터 알아보도록 하자.
NPM (Node Package Manager)이란?
NPM은 Node.js의 패키지 관리자로, Node.js 패키지 및 모듈을 관리하는 데 사용됩니다.
개발자들이 공유한 코드(라이브러리, 프레임워크 등)를 쉽게 설치하고 관리할 수 있게 해주는 도구입니다.
왜 사용하는가?
- 모듈 관리: NPM을 사용하면, 수천 개의 무료 패키지에 접근하여 이들을 프로젝트에 쉽게 통합할 수 있습니다.
- 버전 관리: 패키지의 버전을 관리하여 호환성 문제를 최소화합니다.
- 의존성 관리: 프로젝트에 필요한 모든 의존성을 자동으로 관리합니다
이러한 패키지, 프로젝트 정볼르 가지고 있는것이 package.jsom 이다.
npm inint 으로 pakage.json을 생성할 수 있다.- 예시) 최대한 많은 예시를 포함할 수 있게 길게 뽑아보았다…
{ "name": "example-project", "version": "1.0.0", "description": "An example Node.js project", "keywords": ["node", "example", "project"], "homepage": "https://example.com", "bugs": { "url": "https://github.com/example/example-project/issues", "email": "support@example.com" }, "license": "MIT", "author": "John Doe", "contributors": [ "Jane Doe <jane@example.com>" ], "repository": { "type": "git", "url": "https://github.com/example/example-project.git" }, "scripts": { "start": "node app.js", "test": "npm run test" }, "config": { "appConfig": "settings" }, "private": true, "dependencies": { "express": "^4.17.1" }, "devDependencies": { "jest": "^26.1.0" }, "peerDependencies": { "react": "^17.0.1" }, "bundledDependencies": ["lodash"], "optionalDependencies": { "typescript": "^3.9.7" }, "engines": { "node": ">=12.0.0", "npm": ">=6.0.0" }, "os": ["darwin", "linux"], "cpu": ["x64"], "publishConfig": { "registry": "https://npm.example.com" }, "main": "app.js", "browser": { "./moduleA.js": "./moduleA-browser.js" }, "bin": { "myapp": "./bin/myapp" }, "man": ["./man/doc.1"], "directories": { "lib": "./lib", "bin": "./bin", "doc": "./doc", "test": "./test" }, "files": ["lib", "bin", "doc", "test"], "funding": { "type": "patreon", "url": "https://patreon.com/example" } }
name: 프로젝트의 이름입니다.- name은 반드시 214자보다 짧아야 한다. 이는 scoped package 의 scope을 포함한다.
- name은 점(.)이나 밑줄(_)로 시작할 수 없다.
- name은 대문자를 포함해서는 안된다.
- name은 URL의 일부분이자, 커맨드라인의 인수이고 폴더명이다. 따라서 모든 URL-safe하지 않은 name 은 거부된다
몇 가지 규칙
version: 프로젝트의 현재 버전을 명시합니다.
name과 version 은 누락되면 패키지는 설치할 수 없다.
description: 프로젝트에 대한 간략한 설명입니다.
depedenies
dependencies: 배포환경에서 필요한 의존성 모듈
devDependencies: 개발 과정에서만 필요한 의존성 모듈 npm install —save -dev [패키지] 형태로 설치 가능
peerDependencies: 호스트 패키지와 밀접하게 연관된 패키지 목록입니다.
bundledDependencies: 패키지와 함께 번들링되어야 하는 의존성 목록입니다.
optionalDependencies: 선택적으로 설치할 수 있는 의존성 목록입니다.
keywords: 프로젝트와 관련된 키워드 목록입니다.
homepage: 프로젝트 홈페이지의 URL입니다.
bugs: 버그 리포트를 위한 URL과 이메일 주소입니다.
프로젝트의 이슈와 버그 트래킹을 볼 수 있는 url과 이슈를 알릴 email 주소를 입력한다. 이 항목들은 패키지 사용자가 문제에 직면했을 때 도움이 주기 위함이다. "bugs": { "url": "http://github.com/owner/project/issues", "email": "project@hostname.com" }
license: 프로젝트 라이선스를 명시합니다.
people fields:
author: 프로젝트의 저자 정보입니다.
contributors: 프로젝트에 기여한 사람들의 목록입니다.
"author" 는 한 사람만을 지정하고, "contributors" 는 여러 사람을 배열로 지정한다. 각 사람은 아래와 같이 필수적으로 name을 포함하고 선택적으로 email 과 url 값을 갖는다. "author": { "name" : "Barney Rubble", "email" : "b@rubble.com", "url" : "http://barnyrubble.tumblr.com/" } 또는 하나의 스트링으로 아래와 같이 줄여서 입력하면 npm이 이를 파싱하게 된다. "author": "Barney Rubble <b@rubble.com> (http://barnyrubble.tumblr.com/)" npm은 또한 "maintainers" 라는 필드에 당신의 npm 사용자 정보를 설정한다.
repository: 프로젝트의 소스 코드 저장소 정보입니다.
scripts: 프로젝트와 관련된 스크립트 명령어를 정의합니다.
config: 프로젝트 스크립트에서 사용할 설정 매개변수입니다.
private: 프로젝트가 비공개인지 여부를 나타냅니다.
engines: 프로젝트가 요구하는 Node.js 및 npm의 버전입니다.
os: 프로젝트가 지원하는 운영 체제 목록입니다.
cpu: 프로젝트가 지원하는 CPU 아키텍처 목록입니다.
publishConfig: npm 레지스트리에 배포할 때 사용하는 설정입니다.
main: 프로젝트의 진입점 파일을 지정합니다.
browser: 브라우저 환경에서 사용될 때 대체될 모듈을 지정합니다.
bin: 프로젝트가 제공하는 실행 파일을 지정합니다.
man: 프로젝트의 매뉴얼 페이지를 지정합니다.
directories: 프로젝트 디렉토리의 구조를 지정합니다.
files: 패키지에 포함될 파일들을 지정합니다.
funding: 프로젝트를 지원할 수 있는 방법을 제공합니다.


