npm
, Node Package Manager
, 노드 패키지 매니저입니다. npm
의 역할은 여러 패키지들을 쉽게 설치 및 업데이트, 삭제하도록 도와줍니다. 패키지들은 일종의 노드 모듈입니다. 그래서 우리가 편리하게 이용하다 보면 수 많은 패키지들을 설치하게 됩니다. 그런데 이렇게 설치한 패키지들을 일일히 관리하려면 매우 번거롭겠죠? 따라서 이들은 package.json
에 의해 관리됩니다.
서론에서 언급한 패키지들을 이용하다보면 엄청 많은 패키지들을 이용하는데, 문제는 이 패키지들이 각각의 버전을 가지고 있다는 것입니다. 예를들면 우리가 현재 v14노드를 써서 프로그램을 개발했다고 합시다. 당연히 과거 버전에서는 v14의 기능들을 쓸 수 없겠고, 먼 미래에 누군가가 이 프로그램을 설치했을 때 미래의 노드 버전에서는 삭제되어서 사용하지 못하거나 권장되지 않는 문법으로 인해 충돌이 발생할 수 있습니다. 그래서 우리는 프로젝트 어딘가에 사용한 패키지의 버전을 명시해주어야 하는데요. 이 역할을 하는 파일이 package.json
입니다.
정리하자면 package.json
은 패키지 버전을 관리하는 파일이라고 볼 수 있습니다. 그래서 노드 프로젝트를 진행할 때는 가급적이면 package.json
을 우선적으로 만들고 이용하는 것이 좋습니다.
그럼 이제 package.json
파일을 만들어볼까요?
노드 프로젝트 폴더의 경로에서 cmd를 실행합니다. 혹은 cd명령으로 노드 프로젝트 경로로 이동합니다. 그리고 다음 명령어를 입력해서 package.json파일 생성 절차를 실행합니다.
npm init
그러면 잠시후 영어로 뭐라뭐라 나오고 우리가 입력할 수 있는 공간들이 나옵니다.
마지막 license까지 적고나면 프로젝트 폴더내에 package.json
파일이 하나 생성되는데, 입력한 내용이 적혀있음을 알 수 있습니다.scripts
문자열이 생성되었는데 이부분은 npm 명령어를 지정하는 곳입니다. 예를들면 위의 사진의 test는 npm run test
와 같은 식으로 이용할 수 있으며, 사용자가 직접 추가해서 만들수도 있습니다.
package.json
파일 생성 후 다른 패키지들을 설치하면 자동으로 package.json 파일에 기록됩니다.
한가지 더 중요한 이야기는 패키지 버전
입니다. 0.0.0이라는 숫자가 막 오는게 아니고 다 의미를 가지고 있습니다. Node.js
에서는 SemVer
표기를 따르는데 이것은 0.0.0
처럼 세 자리 숫자로 버전을 명시하는 방식입니다. 그럼 이제부터 각 자리의 의미를 알아보겠습니다.
0.0.0에서 첫 번째 자리는 major
, 이하 버전의 정식 버전과 하위 호환이 불가능한 기능 변경을 의미합니다. 첫 번째 자리가 0
이라면 정식 출시 이전인 초기 개발 단계를 의미하고 1 이상
의 숫자라면 정식 버전을 의미합니다. 보통 히오스 2.0, 침착맨 2.0 처럼 major 자리가 변경될 때는 수많은 업데이트를 포함하고 있습니다. 그래서 하위버전과 호환이 안될 확률이 굉장히 높습니다.
0.0.0에서 두 번째 자리는 minor
, 하위 호환이 가능한 기능 변경을 의미합니다. 기능 변경이 생겼으나 하위 버전과 문제없이 호환이 될 때 minor 자리의 숫자를 올립니다.
0.0.0에서 세 번째 자리는 patch
, 패치/수정을 의미합니다. 패치는 보통 기능의 추가보다는 기존 기능의 문제점을 수정했을 때 patch 자릿수를 올립니다.
아직 못보신 분들도 있겠지만 종종 package를 설치하거나 다른사람의 코드를 보다보면 패키지의 버전 앞에 ^, ~, >, <
등 특수문자가 붙어있는 경우가 있습니다. 이 특수문자들은 패키지 설치나 업데이트에서 어떤 버전을 설치해야하는지를 명시해주는 역할을 합니다.