Salesforce 실전 개발 노트

[Node.js] npm 과 npx 본문

카테고리 없음

[Node.js] npm 과 npx

조심조심 2021. 8. 27. 21:38

npm(Node Package Manager) 란?

node.js가 빠른 발전을 할 수 있었던 것도 이 npm덕분이라 생각하는데

npm은 Node Package Manager의 약자로 자바스크립트 프로그래밍 언어를 위한 패키지 관리자이다. 자바스크립트 런타임 환경 Node.js의 기본 패키지 관리자이고 사용하는 모듈들을 패키지로 만들어 npm을 통하여 관리하고 배포하고 있다.

 

패키지들의 버전이 빈번하게 업데이트되므로 프로젝트가 의존하고 있는 패키지들이 관리될 필요가 있다. npm에서는 package.json 파일로 프로젝트의 정보와 패키지들의 의존성을 관리한다.

package.json 에는 사용하고 있는 패키지들의 명세가 작성되어 있기 때문에 프로젝트를 다른 사람에게 공유하고 싶다면 package.json을 공유하여 개발 환경을 빠르게 구축할 수 있다.

JAVA에서는 Maven의 pom.xml과 비슷한 역할을 한다.

{
  "name": "project_name",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^5.14.1",
    "@testing-library/react": "^11.2.7",
    "@testing-library/user-event": "^12.8.3",
    "react": "^17.0.2",
    "react-dom": "^17.0.2",
    "react-scripts": "4.0.3",
    "web-vitals": "^1.1.2"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}

package.json 에서 name  version 은 생략할 수 없다. dependencies 에는 프로젝트가 의존하는 패키지들의 이름과 버전을 명시한다. 

 

npx 란?

npx는 npm의 npm@5.2.0 버전부터 새로 추가된 도구입니다. 따라서 npm@5.2.0 이상 버전만 깔려 있다면 npx 커맨드를 사용 가능합니다.

npx는 npm 레지스트리의 패키지 사용 경험을 파악하기 위한 도구입니다 - npm은 레지스트리에서 호스팅되는 종속성을 매우 쉽게 설치하고 관리할 수 있으며, npx는 레지스트리에서 호스팅되는 CLI 도구 및 기타 실행 파일을 쉽게 사용할 수 있습니다. 지금까지 일반적인 npm과 관련하여 약간의 귀찮은 과정들이 필요했던 여러 가지 사항을 크게 단순화합니다.

 

npx를 사용하는 경우

로컬로 설치된 도구들을 npm run scripts 없이 사용할 때

로컬로 설치된 도구들을 npm-run-scripts 없이 사용할 때

 과거 몇 년동안, npm의 생태계는 설치 도구들을 전역으로 설치하는 것 대신에 프로젝트-로컬에 devDependencies로 설치하도록 발전했습니다. 이는 mocha, grunt 그리고 bower같은 이전에 전역으로 시스템이 설치했던 도구들이 이제는 프로젝트 별로 각각의 버젼을 가질 수 있게 되었습니다. 따라서 우리가 npm기반의 프로젝트를 작동하기 위해 git repository를 복제하여, node와 npm를 이용하여 설치하거나 테스트하기위해 npm합니다. 이 기능은 npm run-script가 경로에 로컬 바이너리를 추가한 이후로 더 잘 작동합니다.

하지만, 단점이 있었습니다. 이러한 방식은 로컬 바이너리와 상호작용하는 것을 빠르고 간편화 해주지는 못합니다. 이를 해결하는 방법이 여러가지 있습니다만, 모든 것들이 이런 도구들을 우리의 scripts에 넣어야하는 등의 짜증을 유발합니다. 게다가 --를 이용하여 인자를 넘겨야하죠. alias npmx=PATH=$(npm bin):$PATH 같은 shell을 이용한 방법도 있고, ./node_modules/.bin/mocha같이 직접 경로를 넣을 수도 있습니다. 모두 작동은 하죠, 하지만 그다지 좋아보이지는 않습니다.

npx는 이에 대한 최고의 해결책을 줍니다. 우리가 로컬로 설치된 것들을 사용하기 위해서 오직 $ npx mocha만 입력하면 됩니다. 만일 추가적인 과정이 필요하거나 shell auto-fallback을 설정한다면, 프로젝트 디렉토리 안에서 $ mocha를 이용하면 됩니다.

추가적으로 npx는 이미 설치된 바이너리를 실행한다면 기본적으로 overhead가 없습니다. 현재 돌아가는 node 프로세스에 도구 코드를 로드하는 것을 매우 효율적으로 해줍니다.

한 번만 사용할 커맨드를 실행할 때

 

 

 

 

참고