개요

npx는 bin 형태로 배포되는 npm 패키지를 위한 툴이다.

node.js를 설치하면 같이 깔린다.

npx { command } 방식으로 호출한다.

언제 사용하는데?

  • 로컬 패키지에 설치된 모듈을 먼저 실행하고 싶을 때
  • 자주 사용하지 않는 명령어에게 오염당하고 싶지 않을 때

로컬이 먼저다

npx { command } 를 실행하게 되면, 우선 로컬 프로젝트의 의존성에서 탐색하여 실행한다.

1
2
3
"dependencies": {
"hexo": "^6.0.0"
}

예를들어 npx hexo 라는 커맨드를 실행하면 로컬에 설치된 6.0.0 버전의 hexo가 실행된다.

만약 로컬과 전역의 버전이 다르고, 로컬 프로젝트에선 꼭 특정 버전의 명령어가 필요하다면 npx를 사용하면 된다.

Q. npm run script와 다를바가 없지 않나요!?
A. 네, 맞습니다. 그냥 취향 차이입니다. 다만 배포 목적의 모듈에서는 npm run script를 지정해줘야 다른 사용자가 햇갈리지 않겠죠?

전역 오염을 방지

npx 명령어로 가장 유명한 키워드는 npx create-react-app 이다.

왜 react.js는 npx를 권장했을까?

create-react-app은 프로젝트 시작을 제외하고 거의 호출하지 않는 명령어이다.

아마 프로젝트를 진행하는 동안 수십번의 업데이트가 이루어졌을 것이다.

만약 어떤 프로젝트를 끝내고 다음 프로젝트에서 전역에 설치된 create-react-app을 호출한다면,

분명 old한 버전의 create-react-app을 호출하게 될 것이다. (오염됐다고 묘사한다)

따라서 전역 명령어는 사용하기 전에 업데이트를 해주는 것이 국룰이다.

하지만 앞에서도 언급했듯이 Node.js의 특성상 업데이트가 너무 빈번하기 때문에 매우 귀찮은 일이다.

이때 npx create-react-app 을 호출하면 언제나 최신 버전의 react app을 만들 수 있다!

주의 사항

간혹 패키지 설치명과 명령어의 이름이 다른 경우가 있으니 주의하도록 하자.

예시) npm-check-updates의 경우 명령어 이름이 ncu이지만 설치명은 npm-check-updates이기 때문에 npx npm-check-updates로 호출해야한다.

요약

  1. npx는 우선 로컬 프로젝트의 실행파일을 찾는다.
  2. 로컬 프로젝트에 없으면 최신 버전의 모듈을 설치하고 전역에서 실행한다.