# npm과 npx의 차이에 대해서

### 글로벌 모듈은 혼란스럽습니다.

npm 을 통해서 모듈을 설치할 때, 한 가지 옵션을 주게 되면 매 프로젝트마다 모듈을 설치해 줄 필요가 없고 그저  내 컴퓨터 안에 글로벌한 공간에 모듈을 설치해 프로젝트마다  같은 모듈을 공유해서 사용할 수 있습니다.&#x20;

바로 -g 옵션인데요, 사용 방법도 꽤 간단합니다.

{% code title="global" %}

```bash
npm install 모듈이름 -g
```

{% endcode %}

-g를 붙여주기만 하면 글로벌 모듈을 설치할 수 있습니다.

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

개발자 입장에서는 귀찮게 여러 번 설치할 필요도 없고 한 번 설치면 끝나는데 왜 좋은 방법이 아닐까 라고 생각하시는 분들이 있을지도 모르겠습니다. 그 이유에는 대표적으로 3가지가 있습니다.

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

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

#### 업데이트를 진행했을 때 변동사항이 생겨 다른 프로젝트에도 영향을 끼칠 수 있습니다.

프로젝트를 3개를 운영하는데, 같은 모듈의 각각 다른 버전이 필요한 상황이 있을 수 있습니다. 이럴 때 글로벌 모듈의 버전은 당연히 한 개이기 때문에 문제가 발생하게 됩니다.

#### create-react-app 같은 보일러플레이트에는 치명적입니다.

리액트 프로젝트 생성 도구인 create-react-app 같은 모듈의 경우, 변경사항이 꽤나 잦은 모듈입니다. 그렇기 때문에 매 설치 전마다 npm으로 재 설치를 하지 않는 경우에는 이전 버전을 사용할 여지가 꽤 있습니다. 이런 프로젝트 생성 모듈은 매 업데이트마다 새로운 기능과 다양한 버그들이 고쳐집니다. 그리고 이런 보일러플레이트 같은 경우에는, 항상 최신 버전을 유지해 주는 것이 좋은데, 매번 설치하는 것이 꽤나 귀찮은 일입니다.

### 해결책, npx

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

### npx는 어디에 효과적일까?&#x20;

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