package.json이란?

package.json파일은 프로젝트 폴더 터미널에 npm init -y를 입력할 경우 생성되는 파일입니다.

package.json이란 현재 프로젝트에 관한 정보와 패키지 매니저(npm 등...)을 통해 설치한 모듈들의 의존성을 관리하는 파일입니다.

기본적인 json파일의 형식을 따르고 있어서,

{
"key":"value",
"key":"value"
}

이러한 형식으로 작성되고 있다.

package.json 파일의 기본 형식

가장 처음 npm init -y을 실행하면 package.json파일이 생성되고, package.json 파일을 열어보면(vs코드, 메모장, vim 등으로 열어서 수정가능하다.) 적혀있는 내용은 다음과 같다.

{
  "name": "git",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

name

name은 package.json파일에서 반드시 존재해야하는 값이다. 없으면 패키지 설치가 불가능하다.

name은 패키지의 이름을 나타낸다. 설명하자면,
package.json파일에서 가장 위에 적혀있는 "key":"value"형식은 "name":"git"이다. 이는 이 package.json파일이 Git이라는 폴더에서 생성되어서 그렇다.
만약 package.json파일이 설치된 폴더명이 movie search라면, "name":"movie-search"로 작성될 것이다.

name의 중요한 규칙은 3가지이다.

  • 소문자로 작성되어야 한다.
  • 한 단어로 작성되어야 한다.
  • -(하이픈)이나 _(언더스코어)를 사용할 수 있다.

그 외에도 몇 가지 규칙이 더 존재한다.

  • 214자 이하로 작성되어야 한다.
  • url에 안전하지 않은 문자는 포함할 수 없다.
  • "js"나 "node"를 넣으면 안된다.
  • .(점)이나 _(언더스코어)로 시작할 수 없다.
    등이다.

version

version은 name과 함께 package.json파일에서 반드시 존재해야하는 값이다. 없으면 패키지 설치가 불가능하다.

프로젝트 버전을 의미한다.
3단계 버전을 사용한다.

3단계 버전이란, xxx.yyy.zzz의 형식으로 작성된 것을 의미한다.
xxx에 해당하는 것을 Major, yyy에 해당하는 것을 minor, zzz에 해당하는 것을 patch라고 지칭한다.
Major은 대규모 업데이트를 말하고, minor은 소규모 업데이트, 그리고 patch는 버그 수정 시 올라간다.

description

패키지의 설명을 적습니다.
이 설명은 다른 사람들이 npm search description_value로 검색할 때 이 패키지를 찾을 수 있도록 합니다.

main

설명 상으로는 "main"항목은 프로그램의 시작점이 되는 모듈의 ID라고 합니다.

예시로는 "foo"라는 패키지가 있다면 이 패키지를 설치한 뒤, require("foo")를 실행했을 때, "main"으로 지정한 모듈의 exports 객체가 반환된다고 합니다.

모듈ID는 패키지 루트에 상대적인 경로를 지정해야 합니다.
대부분의 모듈에 있어서 메인 스크립트를 갖는 것은 유용하지만 종종 그렇지 않은 경우도 있다고 합니다.

scripts

패키지에서 다양한 타이밍에 자주 사용할 커멘드를 key를 별명으로 지정해서 사용할 수 있는 방법을 이야기합니다.

scripts의 기본 형식은 아래와 같습니다.

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
	}

여기서 조금 더 간단히 보자면 이런 형식으로 볼 수 있습니다.

"scripts":{
	"scripts_key":"scripts_value"
    }

여기서 "scripts_value"를 실행하기 위해서는 npm run scripts_key를 작동하면 됩니다.

즉,

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
	}

구문을 작동시키기 위해서는 npm run test를 터미널에 실행시키면 value값인 "echo \"Error: no test specified\" && exit 1"가 실행됩니다.

여기서 test의 value값인 "echo \"Error: no test specified\" && exit 1"의 의미는 echo "Error: no test specified"는 콘솔에 해당 문자열을 출력하라는 맣이고 exit 1은 에러와 함께 종료하는 뜻입니다.

실제로 터미널에 npm run test를 실행하면

PS C:\Users\user\Desktop\Git> npm run test

> git@1.0.0 test
> echo "Error: no test specified" && exit 1

"Error: no test specified" 
PS C:\Users\user\Desktop\Git> 

로 작성됩니다.

keyword

키워드를 문자열로 기술합니다.
이 키워드는 다른 사람들이 npm search keyword_value로 검색할 때 이 패키지를 찾을 수 있도록 합니다.

author

한 사람일 경우는 key로 author을 입력하고 여러 사람일 경우에는 key로 contributors를 입력합니다.
작성 시 필수적인 하위key에는 name이 있습니다. (선택적인 하위key에는 email과 url이 존재합니다.)

일반적인 형태로는

"author(혹은 contributors)" : {
	"name":"name_value",
    "email":"email_value",
    "url":"url_value(패키지 관련 url)"
    }

로 입력되거나 혹은 줄여서
"author(혹은 contributors)" : "name_value <email_value> (url_value)"
로 표시됩니다.

license

패키지 사용자들이 패키지를 사용하기 위해 어떻게 권한을 얻는지, 또는 어떤 금기 사항이 있는지 알게 하기 위해 라이센스를 명시해야 합니다.

가장 간단한 방법은 BSD-3-Clause나 MIT 같은 일반적인 라이센스 표준인 SPDX ID를 아래와 같이 지정하는 것입니다.

"license":"BSD-3-Clause"

spdx.org에서 SPDX라이센스 아이디 전체 리스트를 볼 수 있습니다.
OSI에서 승인한 것들 중 하나를 사용하는 것이 이상적입니다.

SPDX 표현은 아래와 같이 사용해야 합니다.

"license":"ISC"
"license":"(MIT OR Apache-2.0)"

만약 패키지가 여러 개의 라이센스 아래에 있다면, 크게 3가지 방법을 사용할 수 있습니다.

  • or 연산자 사용
    "license":"(ISC OR MIT)"
  • and 연산자 사용
    "license":"(ISC AND MIT)"
  • WITH 연산자 사용
    "license":"(ISC WITH MIT)"
  • 우선순위 괄호 사용
    "license":"{(ISC WITH MIT)AND BSD-3-Clause}"

만약 SPDX식별자로 할당되지 않은 라이센스를 사용한다면, 아래와 같이 SPDX표현을 따라 해당 라이센스를 지정해줘야 합니다.
"license":"SEE LICENSE IN <라이센스 이름>"
<라이센스 이름>의 파일은 패키지 최상위 루트에 있어야합니다.

패키지를 비공개로 사용하거나 어떤 조건에서도 패키지를 퍼블리싱하지 않을 경우에는
"license":"UNLISCENSED"로 표기해줍니다.

0개의 댓글