npm & npx
포스트
취소

npm & npx

해당 포스트는 npm에 대해 정리한 포스트입니다.

🎋npm

Node Package Manager의 약자로 노드의 패키지들을 관리해주는 도구입니다.
패키지란 JavaScript로 만들어둔 모듈 즉, 함수와 변수들을 의미합니다.

직접 구현하기 힘들거나 번거로운 함수와 변수들을 누군가가 미리 만들어놓고 올린 것을 패키지라고 합니다.
저희는 이 패키지를 이용해서 복잡한 구현 로직을 이해하지 않아도 간단하게 사용할 수 있으며, 여러 패키지들을 이용해서 하나의 결과물을 만들 수 있습니다.

그리고 패키지는 다른 패키지에 의존할 수 있습니다.
따라서 하나의 패키지를 설치했다고 하더라도 의존된 많은 패키지들이 같이 설치될 수 있습니다.

🎩 npx

NodePackage를 실행하는 하나의 도구입니다.

npx를 이용하면 일회용으로 사용할 패키지들 혹은 이미 설치된 패키지들을 쉽게 실행할 수 있습니다.
( npx create-react-app, npx prisma 등 )

  • 동작 방식
    1. 패키지가 로컬에 설치되었다면 해당 패키지 실행
    2. 패키지가 로컬에 설치되지 않았다면 최신 패키지 설치 후 실행 후 다시 제거

📝 package.json

설치한 패키지의 버전을 관리하는 파일입니다.

아래 파일은 npm init -y 명령어를 사용하면 생성되는 기본 형태입니다.

1
2
3
4
5
6
7
8
9
10
11
12
{
  "name": "npm",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}
  1. name: 패키지의 이름
  2. version: 패키지의 버전
  3. description: 패키지에 대한 설명
  4. main: 진입점이자 가장 중요한 파일
  5. scripts: 실행할 명령어들
  6. keywords: npm을 통해 검색될 키워드를 작성
  7. author: 작성자
  8. license: 라이센스

위의 설정말고도 다른 설정들이 많이 존재합니다.
( sideEffects, type, eslintConfig 등의 수많은 패키지들에 대한 설정도 가능합니다. )

0️⃣ dependencies

현재 패키지에 의존하는 패키지들을 기록하는 부분입니다.
즉, 설치한 패키지들이 여기 기록됩니다.

1️⃣ devDependencies

현재 패키지에 의존하면서 개발 전용으로 사용되는 패키지를 기록하는 부분입니다.
-D | --save-dev 옵션을 추가하면 개발 전용으로 기록됩니다.

📗 node_modules

실제로 패키지가 설치되는 폴더입니다.
package.json을 임의로 건드리지 않았다면 명시된 패키지들이 모두 해당 폴더에 설치됩니다.

기본적으로 .gitignore을 통해서 node_modules를 제외합니다.
package.json만 있으면 언제든 npm을 통해서 다시 설치할 수 있기 때문입니다.

🗃️ Semantic Versioning

npm에서 패키지 버전을 관리하는 방법으로 세 자리 숫자가 각각의 의미를 가지고 있음을 뜻합니다.
major.minor.patch의 순서로 작성되며, major가 바뀌는 경우 기존 코드에 호환되지 않을 확률이 높기 때문에 주의해야 합니다.

0️⃣ major

맨 앞자리에 숫자이고 0은 초기 개발중, 1 이상은 정식 버전을 의미합니다.
아예 새로운 기능들을 개발하여 기존 기능에 호환되지 않은 문법으로 변경해서 업데이트한 경우 증가합니다.

만약 기존에 사용하던 숫자에서 증가했다면 기존 코드와 호환되지 않을 확률이 높습니다.

1️⃣ minor

두 번째 자리 숫자이고 호환되면서 새로운 기능을 추가하고 업데이트한 경우 증가합니다.

2️⃣ patch

세 번째 자리 숫자이고 기존 기능있던 버그들을 해결하고 업데이트한 경우 증가합니다.

3️⃣ ^, >, <, =, ~

  1. @^: minor 버전까지만 설치하거나 업데이트 가능
  2. @~: patch 버전까지만 설치하거나 업데이트 가능
  3. @>, @<, @>=, @<=: 해당 버전 초과/미만/이상/이하 버전까지만 설치하거나 업데이트 가능
  4. @next: 안정되지 않은 가장 최신 버전 설치
  5. @latest: 안정된 가장 최신 버전 설치
1
2
3
4
5
6
7
8
9
10
# 2023/03/12 기준

# ^3.21.2
npm i express@^3

# ^4.18.2
npm i express@latest

# ^5.0.0-beta.1
npm i express@next

🪺 명령어

0️⃣ 세팅

npm init [-y]

1️⃣ 설치

npm install <패키지명> [-D] [-g]을 이용해서 특정 패키지를 설치할 수 있습니다.

  • 옵션
    1. --save: 일반적으로 설치 ( 지금은 작성하지 않아도 됨 ( 옛날 방식 ) )
    2. -D | --save-dev: 개발 전용으로 설치
    3. -g | --global: 전역적으로 설치

2️⃣ 제거

npm (r|rm|uninstall) <패키지명>을 이용해서 현재 설치된 패키지를 제거할 수 있습니다.

3️⃣ 확인

npm ls, npm ll을 이용해서 현재 설치된 패키지와 버전 등에 대한 정보를 확인할 수 있습니다.

4️⃣ 업데이트

npm update <패키지명>을 이용해서 업데이트가 필요한 패키지를 업데이트 할 수 있습니다.

업데이트가 필요한 패키지는 npm outdated를 입력해서 CurrentWanted가 다른 패키지를 의미합니다.
( update를 하면 실제 버전을 바뀌는 것 같은데 package.json의 버전에는 변화가 없네요… 😥 )

6️⃣ 정보 확인

npm info <패키지명>을 이용해 특정 패키지의 상세 정보를 얻을 수 있습니다.

7️⃣ 동기화

npm prune을 이용해서 package.json에 명시된 대로 설치 및 제거할 수 있습니다.

8️⃣ 경로

npm root을 이용해서 node_modules의 경로를 얻을 수 있습니다.

9️⃣ 중복된 패키지 제거

npm dedupe을 이용해서 중복된 패키지 제거할 수 있습니다.
각 패키지마다 의존하는 다른 패키지가 있을 것이고 그것들이 중복될 수 있기 때문에 가끔씩 입력해주면 좋습니다.

📮 레퍼런스

  1. « Node.js 교과서 개정 2판 5장 » ( 조현영 지음, 길벗, 2020 )
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.