npm은 Node Package Manager의 약자로, Node.js로 만들어진 모듈을 웹에서 받아 설치하고 관리해주는 프로그램이다. 개발자는 CLI 를 통해 필요한 모듈을 설치하는 것이 가능하며, 이러한 모듈의 기능을 가져와 서비스 구현에 사용한다. 또한 모듈에 대한 버전관리도 지원한다는 점에서 메이븐과 매우 유사하다.
package.json
파일은 프로젝트의 정보와 의존성(dependency) 정보를 담은 파일이다. 프로젝트의 이름, 버전, 작성자 및 프로젝트에 필요한 패키지와 패키지에 대한 버전 정보를 가지고 있다. package.json
을 통해 프로젝와 프로젝트 모듈에 대한 의존성 관리와 버전 관리를 할 수 있으며, npm install
명령어를 통해 package.json
에 지정된 의존성 패키지를 설치하는 것이 가능하다.
package-lock.json
파일은 package.json
파일에 명시된 의존성 패키지를 설치할 때, 정확한 버전을 설치하기 위해 자동 생성되는 파일이다. 컴퓨터의 환경이나 시기에 따라, 실제 같은 package.json
을 통해 설치를 하더라도 모듈의 일부버전이 달라 프로그램 실행에서 오류가 나타날 수 있다. 따라서 이러한 문제를, package-lock.json
을 통해 해결할 수 있다. 단 이러한 경우 동일하게 설치한 일부모듈에 문제가 있더라도 모두가 그대로 가져가는 것이기에 초기 프로젝트 생성 시에 이러한 부분을 잘 확인할 필요가 있다.
github의 경우 Potential security vulnerability 라 하여 커밋이 된 package-lock.json
의 잠재적으로 문제가 일어날 모듈에 대해 버전 업데이트를 하라는 경고를 보내기도 한다.
npx는 npm 5.2.0 이후로 포함된 도구로, npm 을 좀 더 편하게 사용하기 위해 npm에서 제공하는 툴이다.
당시 npm 시장이 커지면서 발생했던 대표적인 문제중 하나로, 커뮤니티가 크고 업데이트 잦은 모듈에 대하여, 해당 업데이트를 적용시키기 위해 지속적으로 새롭게 설치해야한다는 번거로움이 있었다.
기존 npm의 경우 모듈을 로컬에 설치해야만 실행이 되었던 문제를 해결한 것으로, 모듈을 로컬에 저장하지 않고 매번 최신 버전의 파일만 임시로 불러와 실행시킨 후 다시 그 파일이 사라지게 해준다.
대표적으로 사용되는 처는 react 프로젝트 환경 구축 시 create-react-app
이나 설치한 모듈의 다른 버전을 실행해보려는 경우 사용한다.
yarn은 Facebook에서 만든 패키지 매니저로, npm과 비슷한 역할을 하면서도, 훨씬 빠른 설치를 도와준다. 이는 npm 이 여러 모듈을 설치하는 경우, 순차적인 설치를 진행하지만, yarn의 경우 병렬적으로 설치하는 것이 가능하기 때문이다.
yarn.lock
파일은 package-lock.json
과 같이 package.json
파일에 명시된 의존성 패키지와 버전 정보를 담은 파일이다. yarn
을 이용해 패키지를 설치할 때, yarn.lock
을 참고하여 의존성 패키지를 설치한다. 이는 모듈의 일부 버전이 달라 프로그램 실행에서 오류가 나타날 수 있는 문제를 방지할 수 있다.
참고
npm과 npx의 차이에 대해서
npx 란 무엇인가!! (node JS)
[JavaScript] npm이란?
[개발상식] npm과 yarn
npm? yarn? 그 차이가 뭐길래...
[#.NPM] NPM vs YARN의 차이점을 알아보자