본문 바로가기

개발관련잡학(雑学)

NPM 과 NPX 무엇이 다른가?

728x90

자주 사용하는 용어인데, 

이제와서 새삼 이 차이에 대해 공부를 해 봤습니다.

두 명령어는 비슷하지만 역할이 명확하게 다른 명령어 라고 하네요.

 

무엇이 다른지 같이 공부 해 봅시다.

npx는 npm의 버전 7.x부터 npm exec의 일부로 포함되었습니다.

 

NPM(NodePackageManager)은 Node 패키지를 관리하는 명령어

NPX(NodePackageExecuter)는 Node 패키지를 실행하는 명령어

 

NPM

Node.js의 기본 패키지 관리 도구입니다.

npm 명령어를 사용하여 인터넷 상의 리포지토리에서 Node 패키지를 설치하거나 패키지의 버전 관리를하는 것이 주요 책임입니다.

 

NPX

Node.js의 패키지 러너 입니다. 버전 5.2부터 기본 설치됩니다. npx 명령어를 사용하여 Node 패키지를 보다 간편하게 실행 가능하도록하는 것이 주요 책임입니다.

 

인데,,

혼란스러운 것은 패키지를 사용 할 때인데요..

Node 패키지를 터미널에서 실행하는 경우 두 명령어 모두 사용할 수 있기 때문입니다.

1. package.json의 script에 실행 명령을 기록하여 npm을 통해 명령을 실행

2. npx를 통해 명령을 실행

일반적으로 npm을 통해 설치한 패키지는 node_modules 디렉토리에 저장됩니다.

그러나 패키지를 실행하려고 터미널에서 명령을 실행해도 경로가 통하지 않으므로 오류가 발생합니다.

 

command not found

이런 오류가 뜰 때 npx로 하면 비껴갈 수 있습니다.

// 1. npm을 경유하여 실행
// package.json의script에{"lint": eslint}가 기재되어있다고 가정
$ npm run lint

// 2. npx를 경유하여 실행
$ npx eslint

 

NPM과 NPX의 사용

어떻게 NPM과 NPX 명령어를 구분해서 사용해야 할까요? 제 경우는 다음과 같은 방침을 채택하고 있습니다.

 

NPM은 빌드, 테스트, 린트 등 애플리케이션 개발에 있어서 단계별 작업에 대해 재현성을 유지하고 싶은 경우 NPX는 위의 경우를 제외한 다른 경우

npm을 통해 명령어를 실행할 경우, package.json의 script에 실행 명령어를 추가해야 합니다.

따라서, 실행 명령어 자체가 버전 관리에 가치가 있는 경우에는 npm 명령어를 사용합니다.

 

그 외의 경우에는 기본적으로 npx를 사용하면 문제가 없습니다.

 

NPX를 선택하는 이유

이렇게 보면 npx에 큰 특징이 없어 보이지만, npx를 사용해야 하는 이유는 다음과 같은 특징을 가지고 있습니다.

 

설치된 Node 패키지를 터미널에서 실행 가능

 

설치되어 있지 않은 Node 패키지도 터미널에서 실행 가능

 

(실제로 npx는 npm으로 설치되어 있지 않은 Node 패키지도 사용할 수 있습니다.

구체적으로는 명령어 실행 시 일시적으로 패키지를 설치하고 실행 종료 시에 파기합니다.

따라서 어떤 테스트를 하고 싶은 패키지가 있거나 일시적으로 사용하고 싶은 패키지가 있는 경우,

npm으로 설치하여 사용 후에 언인스톨하는 등의 불필요한 절차를 생략할 수 있습니다.

728x90