`package.json`에는 프로젝트에 대한 설명, 종속성 패키지, 실행 스크립트 등의 정보를 담는 매니페이스(Manifest) 파일입니다.
여기서 주의할점은 사용하는 패키지 매니저에따라 속성이 조금씩 다를 수 있기 때문에 공식 홈페이지에서 확인하시는게 좋습니다. (NPM, Yarn berry, pnpm)
아래 설명은 NPM을 기준으로 설명합니다.
name
패키지를 게시하려는 경우 `package.json`에서 가장 중요한 사항은 필수인 이름 및 버전 필드입니다. 이름과 버전이 함께 완전히 고유한 것으로 간주되는 식별자를 형성합니다. 패키지 변경은 버전 변경과 함께 이루어져야 합니다. 패키지를 게시할 계획이 없는 경우 이름 및 버전 필드는 선택 사항입니다.
{
"name": project
}
주의 사항
- 이름에 "js" 또는 "node"를 넣지 마세요.
- 나중에 중복된이름으로 pulish가 안될 수도 있습니다. 따라서 미리 여기서 확인하고 중복되는 이름은 피하는게 좋습니다.
version
버전은 npm과 함께 종속성으로 번들로 제공되는 node-semver 로 구문 분석할 수 있어야 합니다.
{
"version": "1.0.0"
}
description
설명을 작성하면 패키지를 사람들이 조금 더 쉽게 찾을 수 있도록 도와줍니다.
{
"description": "hello",
}
keywords
키워드를 입력하면 패키지를 사람들이 조금 더 쉽게 찾을 수 있도록 도와줍니다.
{
"keywords": [
"styles",
"emotion",
"react",
"css",
"css-in-js"
]
}
homepage
프로젝트 홈페이지의 URL입니다.
{
"homepage": "https://github.com/owner/project#readme"
}
bugs
프로젝트의 이슈 트래커 URL 및 이슈를 보고해야 할 이메일 주소를 제공해준다면 사용자가 패키지와 관련된 문제를 만났을 때 도움이 됩니다.
{
"url" : "https://github.com/owner/project/issues",
"email" : "project@hostname.com"
}
license
패키지에 라이선스를 명시한다면 사용자들이 어덯게 패키지를 사용할 수 있는지, 어떤 제한이 있는지 알 수 있습니다.
{
"license": "MIT",
}
files
선택 사항인 "files" 필드는 패키지가 종속성으로 설치될 때 포함해야 하는 항목을 설명하는 파일 패턴의 배열입니다. 파일 패턴은 .gitignore와 유사한 구문을 따르지만 반대로 작동합니다. 이 필드를 생략하면 기본값으로 [""]이 지정되며, 이는 모든 파일을 포함하도록 설정됩니다.
{
"files": [
"**/packages/*/src/*",
"**/packages/*/src/**/*"
]
}
일부 파일은 항상 포함되며 설정과 관계없이 다음과 같습니다.
- package.json
- README
- LICENSE / LICENCE
- "main" 필드에 지정된 파일
README 및 LICENSE의 대소문자와 확장자는 상관없습니다.
반대로 다음과 같은 파일은 항상 무시됩니다.
- .git
- CVS
- .svn
- .hg
- .lock-wscript
- .wafpickle-N
- .* .swp
- .DS_Store
- ._*
- npm-debug.log
- .npmrc
- node_modules
- config.gypi
- *.orig
- package-lock.json (게시하려면 npm-shrinkwrap.json을 사용하세요)
main
`main` 필드는 프로그램의 주요 진입점인 모듈 ID입니다.
예를 들어, 사용자가 `foo`라는 이름의 패키지를 설치하고, require("foo") 를 통해 모듈을 import 하면, "main"으로 지정한 모듈의 exports 객체가 반환된다.
`main`이 설정되지 않은 경우, 패키지의 루트 폴더에 있는 `index.js`로 기본 설정됩니다.
{
"main": "./src/index.ts",
}
browser
만약 여러분의 모듈이 클라이언트 측(Client side)에서 사용되도록 의도되었다면, `main` 필드 대신 `browser`필드를 사용해야 합니다. 이것은 사용자에게 이 모듈이 Node.js 모듈에서 사용할 수 없는 원시 요소(예: window)에 의존할 수 있다는 힌트를 제공하는 데 도움이 됩니다.
{
"browser": "./sources/index.js"
}
packageManager
`packageManager`필드는 패키지가 특정 패키지 매니저를 사용해야 할 경우 특정 패키지와 버전을 지정할 수 있는 필드입니다.
{
"packageManager": "yarn@3.2.3",
}
workspaces
`workspaces` 필드는 프로젝트를 모노레포로 구성할 때 하위 프로젝트의 경로를 나열하는 필드입니다. glob 패턴으로 작성할 수 있습니다.
{
"workspaces": [
"packages/*"
]
}
repository
코드가 있는 위치를 저장하는 필드입니다.
{
"repository": {
"type": "git",
"url": "git+https://github.com/emotion-js/emotion.git"
}
}
Reference
https://docs.npmjs.com/cli/v9/configuring-npm/package-json?v=true
'Node.js' 카테고리의 다른 글
[Node.Js] Module (1) | 2023.12.17 |
---|---|
Peer Dependencies는 왜 필요하고 사용될까? (0) | 2023.12.03 |
패키지 매니저 비교 (npm vs yarn vs pnpm) (0) | 2023.08.20 |
yarn berry 세팅하기 (0) | 2023.07.02 |
왜 기업들은 Yarn Berry를 많이 사용할까? - (1) (feat : npm) (2) | 2023.06.15 |