npm 과 npx 차이점

예전에 강의를 들을때 npm install <모듈명> -g 로 설치를 했었다.

npm 을 통해서 모듈을 설치할 때 -g 옵션을 주게 되면 프로젝트마다 모듈을 설치해 줄 필요가 없이 내 컴퓨터 안에 글로벌한 공간에 모듈이 설치되어있기 때문에 프로젝트마다  같은 모듈을 공유해서 사용할 수 있다.

그러나 이는 좋은 방법이 아니다.

개발자 입장에서는 귀찮게 여러 번 설치할 필요도 없고 한 번만 설치하면 끝나는데 왜 좋은 방법이 아닐까 라고 생각할 수 있다. 하지만 좋은 방법이 아니다.

그 이유에는 아래와 같다.

모듈이 업데이트 되었는지 안되었는지 확인이 불가능 하다.

모든 프로젝트마다 모듈을 재설치 하는것이 아닌, 한 번 설치한 모듈을 그대로 사용하기 때문에 프로그래머가 매번 글로벌 모듈을 최신 버전으로 재 설치하지 않으면 확인 자체가 불가능 하다.

또한 업데이트를 진행했을 때 변동사항이 생겨 다른 프로젝트에도 영향을 끼칠 수 있다.
프로젝트를 여러개를 운영하는데 같은 모듈의 각각 다른 버전이 필요한 상황이 있을 수 있다. 이럴 때 글로벌 모듈의 버전을 사용하면 동일한 버전을 여러개의 프로젝트가 동일하게 사용하기 때문에 문제가 발생하게 된다.

특히 create-react-app 같은 보일러플레이트는 치명적인 문제가 발생할 수 있다. 리액트 프로젝트 생성 도구인 create-react-app 같은 모듈의 경우 업데이트가 잦은 모듈이다. 그렇기 때문에 매 설치 이전에 npm으로 재 설치를 하지 않는 경우에는 이전 버전을 사용하게 될 수 있다. 

이러한 프로젝트 생성 모듈은 매 업데이트 마다 새로운 기능과 다양한 버그들이 고쳐진다. 그렇기 때문에 보일러플레이트 같은 모듈의 경우에는, 항상 최신 버전을 유지해 주는 것이 좋은데, 매번 설치하는 것이 꽤나 귀찮은 일이다.

이에 대한 해결책이 바로 npx 이다.

npm 5.2버전부터 npx가 기본 패키지로 제공되기 시작했다. npx도 모듈의 일종이다. 이 모듈은 npm을 통해 모듈을 로컬에 설치했어야만 실행시킬 수 있었던 기존 문제점의 해결책이 되었다. 모듈을 로컬에 저장하지 않고, 매번 최신 버전의 파일만을 임시로 불러와 실행 시킨 후 다시 그 파일은 없어지는 방식으로 모듈이 돌아가고 있다.

그러므로 npx는 create-react-app 와 같은 보일러 플레이트 모듈에 효과적이다. npx를 통해 create-react-app을 설치할 경우에는 매번 최신 버전만을 가져와서 설치해 주기 때문에 지금 어떤 버전을 사용하고 있는 지 신경쓸 필요가 없어진다다. 

추가적으로 npx를 사용할 경우 로컬에 모듈을 설치하지않기 때문에 저장 공간 또한 절약 된다.

댓글