해당 포스트는
npm
에 대해 정리한 포스트입니다.
🎋npm
Node Package Manager
의 약자로 노드의 패키지들을 관리해주는 도구입니다.
패키지란 JavaScript
로 만들어둔 모듈 즉, 함수와 변수들을 의미합니다.
직접 구현하기 힘들거나 번거로운 함수와 변수들을 누군가가 미리 만들어놓고 올린 것을 패키지라고 합니다.
저희는 이 패키지를 이용해서 복잡한 구현 로직을 이해하지 않아도 간단하게 사용할 수 있으며, 여러 패키지들을 이용해서 하나의 결과물을 만들 수 있습니다.
그리고 패키지는 다른 패키지에 의존할 수 있습니다.
따라서 하나의 패키지를 설치했다고 하더라도 의존된 많은 패키지들이 같이 설치될 수 있습니다.
🎩 npx
Node
의 Package
를 실행하는 하나의 도구입니다.
npx
를 이용하면 일회용으로 사용할 패키지들 혹은 이미 설치된 패키지들을 쉽게 실행할 수 있습니다.
( npx create-react-app
, npx prisma
등 )
- 동작 방식
- 패키지가 로컬에 설치되었다면 해당 패키지 실행
- 패키지가 로컬에 설치되지 않았다면 최신 패키지 설치 후 실행 후 다시 제거
📝 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"
}
name
: 패키지의 이름version
: 패키지의 버전description
: 패키지에 대한 설명main
: 진입점이자 가장 중요한 파일scripts
: 실행할 명령어들keywords
:npm
을 통해 검색될 키워드를 작성author
: 작성자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️⃣ ^, >, <, =, ~
@^
:minor
버전까지만 설치하거나 업데이트 가능@~
:patch
버전까지만 설치하거나 업데이트 가능@>
,@<
,@>=
,@<=
: 해당 버전 초과/미만/이상/이하 버전까지만 설치하거나 업데이트 가능@next
: 안정되지 않은 가장 최신 버전 설치@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]
을 이용해서 특정 패키지를 설치할 수 있습니다.
- 옵션
--save
: 일반적으로 설치 ( 지금은 작성하지 않아도 됨 ( 옛날 방식 ) )-D
|
--save-dev
: 개발 전용으로 설치-g
|
--global
: 전역적으로 설치
2️⃣ 제거
npm (r|rm|uninstall) <패키지명>
을 이용해서 현재 설치된 패키지를 제거할 수 있습니다.
3️⃣ 확인
npm ls
, npm ll
을 이용해서 현재 설치된 패키지와 버전 등에 대한 정보를 확인할 수 있습니다.
4️⃣ 업데이트
npm update <패키지명>
을 이용해서 업데이트가 필요한 패키지를 업데이트 할 수 있습니다.
업데이트가 필요한 패키지는 npm outdated
를 입력해서 Current
와 Wanted
가 다른 패키지를 의미합니다.
( update
를 하면 실제 버전을 바뀌는 것 같은데 package.json
의 버전에는 변화가 없네요… 😥 )
6️⃣ 정보 확인
npm info <패키지명>
을 이용해 특정 패키지의 상세 정보를 얻을 수 있습니다.
7️⃣ 동기화
npm prune
을 이용해서 package.json
에 명시된 대로 설치 및 제거할 수 있습니다.
8️⃣ 경로
npm root
을 이용해서 node_modules
의 경로를 얻을 수 있습니다.
9️⃣ 중복된 패키지 제거
npm dedupe
을 이용해서 중복된 패키지 제거할 수 있습니다.
각 패키지마다 의존하는 다른 패키지가 있을 것이고 그것들이 중복될 수 있기 때문에 가끔씩 입력해주면 좋습니다.