최근에 리액트를 배우기 시작했을 때, 나는 많은 사람들이 (나를 포함해서) 잘 알려진 npm
대신 npx
를 보고 헷갈려하는 것을 보았습니다.
우리중에 몇몇은 이상하다고 느꼈지만 별로 깊게 생각하지 않았고, 나머지는 그것은 오타라고 생각하고 npx
대신 npm
으로 "고쳐서" 애를 먹었습니다.
이러한 일이 몇 번 일어나고 나서 이 문제를 설명할 필요가 있다고 느꼈습니다. 그것이 바로 나와 같은 오해를 가진 이들을 위해 이 글을 쓴 이유입니다.
오타가 아니고, npx! npm말고.😃
우리가 매우 잘 알고 있듯이, npm은 Node.js의 의존성과 패키지 관리를 위한 패키지 매니저입니다.
우리의 프로젝트에 누군가 패키지 의존성을 설치할 때 짠! 하고npm install
을 실행함으로써 package.json
파일에 의존성들(packages)을 지정할 수 있다는 걸 말합니다.
그리고 버전관리를 지원합니다. 우리 프로젝트가 어떤 버전의 의존성을 사용할지 지정할 수 있는데요, 예를 들어서 대부분의 경우에 패키지의 업데이트로 인하여 프로젝트가 오작동하는 경우를 방지할 수 있고 그 외에도 우리가 원하는 버전의 패키지 의존성을 설치할 수 있습니다.
한편, npx는 Node 패키지를 실행시키는 하나의 도구이고 npm5.2 버전부터 함께 딸려있습니다.
npx는 다음과 같은 역할을 합니다.
1. 기본적으로 실행되어야할 패키지가 경로에 있는지 먼저 확인합니다.(예: 우리의 프로젝트);
2. 경로에 제대로 있다면, 그대로 실행합니다;
3. 그렇지 않다면 패키지는 설치되어 있지 않다는 걸 의미하고, npx가 최신 버전의 패키지를 설치를 한 후에 실행합니다;
위에 설명한 행동들은 npx의 기본 설정 중 하나이고 실행을 방지할 수 있는 명령어도 갖고 있습니다.
예를 들면, 만약 우리가 npx 무슨-패키지 --no-install
을 실행하면 이것은 npx에게 무슨-패키지
가 기존에 설치되지 않았더라도 설치하지 않고 오직 실행만 시키도록 말하는 것이 됩니다.
여기에서 더 많은 npx 명령어들이 있습니다.
여기 우리가 실행하고자 하는 my-package
라는 패키지가 있다고 해봅시다.
아마 npx
가 없다면 우리는 패키지를 실행하기 위해 로컬 경로에서 다음과 같이 실행해야 하겠죠.
./node_modules/.bin/my-package
아니면 package.json
파일의 scripts 부분에 각각의 스크립트로 정의할 수도 있겠네요, 이렇게요.
{
"name": "머시기",
"version": "1.0.0",
"scripts": {
"my-package": "./node_modules/.bin/my-package"
}
}
그리고 npm run my-package
로 실행하느 거죠.
이제, 우리는 npx로 더 쉽게 할 수 있습니다. npx my-package
명령만으로요.
그래서, 보강하자면 npm !== npx
라는겁니다. 그리고 저는 이 짧은 글이 우리의 오해를 해결하는데 도움이 되었으면 합니다.
만약 물어보실게 있다면, 편하게 마음껏 댓글 달아주세요!
코딩 열심히 하셔서 오지고 지리는거 만드시고 항상 행복하세요! 😊
원문: Yes, it’s npx, not npm — the difference explained
첫 번역입니다. 제가 실수했거나 어색한 점 언제든 지적 환영하고 또는 더 나은 번역을 할 수 있도록 한마디씩 해주시면 고맙겠습니다.
좋은 글 감사합니다~