npx와 npm의 차이는 뭔가요?
원문
번역
⛳ 질문
작성일 | 2018-05-30 |
추천수 | 903 |
저는 이제 막 리액트를 막 공부하는 중이고, 페이스북이 이런 미리 만들어진 프로젝트를 통하여 초기 설정을 간소화 시켜주는 것을 알게 되었습니다.
만약 제가 새로운 스켈레톤 프로젝트를 설치해야한다고 하면, npx create-react-app my-app을 커멘드 라인에 치기만 하면 되는거죠.
여기서 궁금한건데, 왜 페이스북은 깃허브에서 npm create-react-app my-app이 아닌 npx create-react-app my-app을 사용하게 하는건가요?
🔥🔥 최다 추천 커맨트 🔥🔥
추천수 : 65
create-react-app은 제너레이터입니다. npx는 인터넷을 통하여 패키지를 다운 받은 후, 일시적으로 실행 시킬 수 있도록 하는 것입니다. 네가 가지고 싶은( 그리고 원하는 ) 결과물은 모조리 다 로컬 환경에 저장됩니다.
👩💻 답변
🎈🎈채택답변🎈🎈
추천수: 1069
npx : npm package 실행기
npm - 패키지들을 관리하지만, 이것으로 패키지들을 실행시키긴 쉽지 않습니다
npx - node package들의 실행을 위한 도구
npx는 npm 5.2+ 버전에 딸려 옵니다
npm 그 자체로는 아무런 패키지도 그냥 실행시킬 수 없습니다. 사실, 어떤 패키지도 실행시킬수가 없습니다.
만약에 npm을 통해 어떤 패키지를 실행시키고 싶다면, package.json 파일을 통하여 실행시키고자 하는 패키지를 특정지어주어야합니다.
실행 파일이 NPM 패키지를 통해 설치되면 NPM은 다음과 같이 링크합니다.
- local 설정은 ./node_modules/.bin/ 경로에 링크를 생성합니다.
- global 설정은 전역 /bin 경로에 링크를 생성합니다 (ex. /usr/local/bin [리눅스] %AppData%/npm [윈도우즈])
NPM
프로젝트에 로컬로 패키지를 설치할 수 있습니다.
npm install some-package
그리고 이제 당신이 커멘드 라인을 통해 nodejs로 그 패키지를 실행시키려 한다고 합시다
some-package
위 커맨드는 실패할 것입니다. 전역으로 설치된 패키지만이 이름을 타이핑 하는 것으로 실행될 것입니다
위 커멘드를 동작하게 하려면, 로컬 경로를 명시해줘야합니다.
./node_modules/.bin/some-package
또 기술적으로 package.json의 script 섹션에 해당 패키지를 추가하여 로컬에 설치된 패키지를 실행할 수도 있습니다.
{
"name": "whatever",
"version": "1.0.0",
"scripts": {
"some-package": "some-package"
}
}
이후 npm run-script (혹은 npm run) 을 통하여 실행시킬 수 있습니다.
npm run some-package
NPX :
npx는 $PATH에 혹은 로컬 프로젝트의 binaries에 <command>가 있는지 여부를 확인하고 이를 실행합니다. 그래서, 위 예제에서 당신이 만약 로컬에 설치된 some-package를 실행하고 싶다면 아래와 같이 타이핑만 하면 됩니다.
npx some-package
npx를 사용하는 또 다른 큰 이점은 사전에 설치되지 않은 패키지를 실행할 수 있다는 것입니다
npx create-react-app my-app
위 예제로 인하여 react app 보일러플레이트를 커멘드가 실행된 곳에서 만들어주고, 항상 제너레이터 혹은 빌드툴의 최신 버전을 어떠한 업그레이트 없이 당신이 필요할 때마다 사용 할 수 있게 되는 겁니다.
용례
npx command는 package.json의 script 섹션에서 자주 사용되지 않거나 모종의 사유로 인하여 디펜던시를 정의하고 싶지 않은 패키지를 사용할 때 유용하게 사용되기도 합니다.
"scripts": {
"start": "npx gulp@3.9.1",
"serve": "npx http-server"
}
npm run serve로 호출하세요
관련된 질문들 :
- node_modules에 로컬로 설치된 패키지를 어떻게 사용하나요?
- npm : 어떻게 ./node_modules/.bin 폴더에 있는걸 실행시키죠?
- npm script를 이용해서 js file을 어떻게 실행시키나요?