[Node.js] package.json

Bam·2022년 3월 8일
0

Node.js

목록 보기
7/19
post-thumbnail

npm, Node Package Manager, 노드 패키지 매니저입니다. npm의 역할은 여러 패키지들을 쉽게 설치 및 업데이트, 삭제하도록 도와줍니다. 패키지들은 일종의 노드 모듈입니다. 그래서 우리가 편리하게 이용하다 보면 수 많은 패키지들을 설치하게 됩니다. 그런데 이렇게 설치한 패키지들을 일일히 관리하려면 매우 번거롭겠죠? 따라서 이들은 package.json에 의해 관리됩니다.

package.json

서론에서 언급한 패키지들을 이용하다보면 엄청 많은 패키지들을 이용하는데, 문제는 이 패키지들이 각각의 버전을 가지고 있다는 것입니다. 예를들면 우리가 현재 v14노드를 써서 프로그램을 개발했다고 합시다. 당연히 과거 버전에서는 v14의 기능들을 쓸 수 없겠고, 먼 미래에 누군가가 이 프로그램을 설치했을 때 미래의 노드 버전에서는 삭제되어서 사용하지 못하거나 권장되지 않는 문법으로 인해 충돌이 발생할 수 있습니다. 그래서 우리는 프로젝트 어딘가에 사용한 패키지의 버전을 명시해주어야 하는데요. 이 역할을 하는 파일이 package.json입니다.

정리하자면 package.json은 패키지 버전을 관리하는 파일이라고 볼 수 있습니다. 그래서 노드 프로젝트를 진행할 때는 가급적이면 package.json을 우선적으로 만들고 이용하는 것이 좋습니다.

package.json 만들어보기

그럼 이제 package.json 파일을 만들어볼까요?

노드 프로젝트 폴더의 경로에서 cmd를 실행합니다. 혹은 cd명령으로 노드 프로젝트 경로로 이동합니다. 그리고 다음 명령어를 입력해서 package.json파일 생성 절차를 실행합니다.

npm init

그러면 잠시후 영어로 뭐라뭐라 나오고 우리가 입력할 수 있는 공간들이 나옵니다.

  • package name: 패키지 이름 (괄호안의 내용은 미입력하고 엔터 쳤을때 default값)
  • version: 프로젝트 버전을 입력합니다.
  • description: 프로젝트 설명을 입력합니다.
  • entry point: js파일의 실행 시작 지점. 가장 main이 되는 js파일입니다.(모듈이 모이는)
  • test command: 코드 테스트를 실시할 때 입력할 명령어입니다.
  • git repository: 코드가 저장된 원격 저장소 주소입니다. 저는 미리 연결을 해두어서 기본값으로 등장했습니다.
  • keywords: npm에서 패키지를 쉽게 찾을 수 있는 keywords를 적는 공간입니다.
  • author: 작가, 패키지를 작성한 사람을 적습니다.
  • license: 패키지의 라이센스를 적습니다.

마지막 license까지 적고나면 프로젝트 폴더내에 package.json파일이 하나 생성되는데, 입력한 내용이 적혀있음을 알 수 있습니다.scripts문자열이 생성되었는데 이부분은 npm 명령어를 지정하는 곳입니다. 예를들면 위의 사진의 test는 npm run test와 같은 식으로 이용할 수 있으며, 사용자가 직접 추가해서 만들수도 있습니다.

package.json 파일 생성 후 다른 패키지들을 설치하면 자동으로 package.json 파일에 기록됩니다.

패키지 버전

한가지 더 중요한 이야기는 패키지 버전입니다. 0.0.0이라는 숫자가 막 오는게 아니고 다 의미를 가지고 있습니다. Node.js에서는 SemVer 표기를 따르는데 이것은 0.0.0 처럼 세 자리 숫자로 버전을 명시하는 방식입니다. 그럼 이제부터 각 자리의 의미를 알아보겠습니다.

첫 번째 자리 major

0.0.0에서 첫 번째 자리major, 이하 버전의 정식 버전과 하위 호환이 불가능한 기능 변경을 의미합니다. 첫 번째 자리가 0 이라면 정식 출시 이전인 초기 개발 단계를 의미하고 1 이상의 숫자라면 정식 버전을 의미합니다. 보통 히오스 2.0, 침착맨 2.0 처럼 major 자리가 변경될 때는 수많은 업데이트를 포함하고 있습니다. 그래서 하위버전과 호환이 안될 확률이 굉장히 높습니다.

두 번째 자리 mimor

0.0.0에서 두 번째 자리minor, 하위 호환이 가능한 기능 변경을 의미합니다. 기능 변경이 생겼으나 하위 버전과 문제없이 호환이 될 때 minor 자리의 숫자를 올립니다.

세 번째 자리 patch

0.0.0에서 세 번째 자리patch, 패치/수정을 의미합니다. 패치는 보통 기능의 추가보다는 기존 기능의 문제점을 수정했을 때 patch 자릿수를 올립니다.

package.json 파일 버전에서 보이는 특수문자들

아직 못보신 분들도 있겠지만 종종 package를 설치하거나 다른사람의 코드를 보다보면 패키지의 버전 앞에 ^, ~, >, < 등 특수문자가 붙어있는 경우가 있습니다. 이 특수문자들은 패키지 설치나 업데이트에서 어떤 버전을 설치해야하는지를 명시해주는 역할을 합니다.

  • ^: 가장 많이 볼 수 있는 문자입니다. minor 버전 까지만 설치되거나 업데이트가 가능합니다. 가끔 1.x.x와 같은식으로도 표현하기도 합니다.
  • ~: patch버전 까지만 설치되거나 업데이트가 가능합니다. 1.1.x와 같은식으로 표현하기도 합니다.
  • >, <, >=, <=, =: 각 문자가 뜻하는 대로 버전의 초과, 미만, 이상, 이하, current를 의미합니다.

0개의 댓글