설명할수 없으면 아무것도 아니다

매일 조금씩 쓰면서 뭘 했는지 기록하고 좋았던 것과 나빴던 것을 바탕으로 새 글을 수정합니다.

Frontend Develop/Node.js

npm 기본 명령어 - npm install, npm init 사용

효니킴 2023. 6. 19. 22:28

📝 NPM(Noed Package Manager)

Node.js 프로젝트를 관리하는 필수적인 도구

npm은 온라인 저장소와 커맨드라인 도구로 구성되어 있다.

 

🌱 NPM 온라인 저장소

수많은 오픈소스 라이브러리와 도구들이 업로드되는 저장소이다.

필요한 라이브러리나 도구를 손쉽게 검색하고 다운로드 받을수 있다. Node.js 인기로 거대한 생태계를 보유하고 있다.

 

프로젝트를 구성하면서 필요한 기능들을 npm 온라인 저장소에서 검색해서 손쉽게 프로젝트에 추가할수도 있다.

 

🌱 커맨드라인 도구

프로젝트 관리를 위한 다양한 명령어를 제공하는 도구이다.

  • 저장소에서 라이브러리, 도구 설치
  • 프로젝트 설정/관리 기능
  • 프로젝트 의존성 관리 기능

 

📝 프로젝트 생성

npm init

npm init 명령어를 이용하면 프로젝트를 생성할수 있다. 프로젝트의 디렉토리를 생성하고 해당 디렉터리 안에서 npm init 명령어를 실행하면 몇번의 질문을 통해 package.json 이라는 파일을 만들어주고 package.json파일이 있는 디렉터리가 Node.js 프로젝트 디렉터리가 된다.

npm init명령어를 사용하면 package name부터 version, description  등.. 자동적으로 만들어준다.

package.json 파일을 확인하면 아래와 같은 json 파일이 만들어진다.

 

📕 package.json

프로젝트 관련 정보들이 저장되는 파일로 이 파일을 직접 수정하거나 npm명령어를 사용하여 프로젝트 정보를 수정할 수 있다.

pakcage.json의 구성 요소

key value
version 프로젝트의 버전
name 프로젝트의 이름
description 프로젝트 설명
script npm run [script name]으로 실행할수 있는 사용자 작성 스크립트
dependencies 의존성 패키지들
devDependencies 개발환경에서만 사용하는 의존성 패키지들

 

📕 라이브러리란?

특정 기능을 수행하는 코드의 묶음

복잡한 기능을 직접 작성하지않고, 다른 사람이 구현한 것을 사용하는 방법이다.

node.js에서는 이 라이브러리를 패키지라고도 부른다.

 

📝 npm install 명령어

npm install 명령어를 통해 프로젝트 의존성을 관리 할수 있다.

npm install 명령어는 사용 하는 옵션에 따라서 여러 용도로 사용할수 있는데 npm i를 축약형으로 사용 할수 있다.

  • 의존성을 추가
  • 의존성 내려받기
  • 개발용 의존성 추가
  • 전역 패키지 추가

 

npm install 명령어를 통해 dayjs패키지를 추가한다. dayjs 패키지는 날짜 관련 기능을 제공하는 패키지이다.

package.json 파일의 dependencies에 deyjs ^1.11.8 버전이 추가 되었다.

패키지를 추가하면 node_modules 디렉터리가 생성되고, node_modules 디렉터리 안에 패키지가 다운로드 받아진다.

 

node_modules 디렉터리 안에 dayjs 디렉터리가 추가된 것을 확인할 수 있다.

 

⚙️ 프로젝트에 의존성 추가하기

npm install [package-name]

필요한 패키지를 프로젝트에 추가할 수 있다. 추가된 패키지는 package.json dependencies안에 추가 되며, node_modules 디렉터리에 저장된다.

 

npm install 만 사용하면 모든 의존성을 설치한다.

 

⚙️ dependencies와 devDependencies

npm install [package-name] --save-dev

npm install [package-name]에 --save-dev 옵션을 사용할수 있다.

npm은 개발용 의존성을 분리하여 관리 할수 있는 기능을 제공한다. 

개발용 의존성이란 배포전 까지만 사용하는 의존성을 의미한다. 예를 들어서 프로젝트 코드의 실행을 확인하는 유닛 테스트 라이브러리들은 개발할 때는 사용을 하지만 개발이후 실행환경에서는 사용할 일이 없다.

이러한 라이브러리들은 npm install [package-name] --save-dev 옵션을 사용하여 개발용 의존성으로 분리하여 관리할수 있다.

 

개발용 의존성은 앞서 일반의존성이 dependencies에 추가되었던것과 달리 package.json의 devDependencies에 추가된다.

 

⚙️ 프로젝트에 의존성 내려받기

npm install

추가된 의존성 패키지들 node_modules 디렉터리에 저장이 된다.

하지만 기본적으로 node_modules 디렉터리 코드 관리나 배포 시에 업로드 하지 않는다.

의존성이 많아지면 용량이 너무 커지는 것과, 운영체제별로 실행되는 코드가 다른 경우가 존재하기 때문이다.

 

따라서 node_modules가 없는 처음 시작하는 프로젝트를 내려받았을 때 npm install 명령어를 아무 옵션없이 사용하면 package.json에 정의된 dependencies와 devDependencies의 의존성을 node_modules 디렉토리에 새롭게 내려받는다.

 

⚙️ 개발용 의존성을 제외하고 내려받기

npm install --production

프로젝트를 배포할 때에는 개발용 의존성을 같이 포함할 필요가 없다.

package.json의 dependencies만 node_modulse에 내려받을 때,

npm install에 --production 옵션을 붙여서 개발용 의존성을 포함하지 않고 내려 받을수도 있다.

 

cow say를 개발용 의존성으로 설치 후 package.json 파일을 확인했을 때, devDependencies에 cowsay가 추가되었다.

그리고 node_modules 디렉토리를 확인해보면 cowsay뿐만 아니라 다양한 패키지들이 추가되었다. 

이는 cowsay 패키지가 사용하는 다양한 패키지들 이다.

 cowsay가 어떤 패키지를 사용하는지 확인시 package-lock.json 파일을 확인할수도 있다.

⚙️ 의존성 버전 표기

npm install [package-name]@[version]

npm install [package-name]을 사용할 때 뒤에 @[version]을 붙여서 패키지 버전을 지정할 수 있다.

 

아래 예시로

버전 설명
~1.13.0 1.13.x 버전 설치
^1.13.0 1.x.x 버전 설치, 가장 왼쪽의 0이 아닌 버전을 고정
0.13.0 0.13.0 버전만 설치

물결(~)표를 사용하게되면 가장 오른쪽에 있는 버전을 제외하고 앞에있는 버전들은 항상 고정이 된다.

케럿(^)을 붙였을 경우 가장 왼쪽에 있는 버전을 고정한다. 따라서 1.x.x  버전이 설치가된다.

아무 기호도 붙이지 않을 경우 해당 버전만 설치하게 된다.

 

⚙️ package-lock.json

프로젝트에 의존성을 추가하면 package-lock.json 이라는 파일이 자동생성된다.

프로젝트 의존성 버전을 명시하지 않고 추가하면 자동으로 케럿(^)이 붙은 현재의 '^최신버전'으로 추가가되는데

의존성 버전이 갑자기 변경되지 않도록 설치된 버전을 고정하는 역할을 한다.

 

패키지를 추가했을 때 package-lock.json 파일이 추가가 되는데 dependencies에 dayjs 1.11.8 버전이 추가 된것을 해당 파일에서 확인할수 있다. 

⚙️ 전역 패키지 추가

npm install [package-name] --global

 

npm install 을 사용해서 프로젝트 외부에서 사용하는 패키지를 내려받을수 있다.

주로 커맨드라인 도구들을 전역 패키지로 추가해서 사용한다. 웹서버를 만들어주는 express-generator 또는 노드.js프로세스를 관리하는 pm2 도구들이 전역패키지로 추가되서 사용할수 있다.

 

⚙️ 로컬 패키지와 전역 패키지

✔ 로컬 패키지

npm install [package-name] 설정하는 의존성은 로컬 패키지라고 부르기도 한다.

이러한 로컬 패키지는 package.json에 선언되어 있고, 프로젝트 디렉토리에 node_modules에 저장된 패키지이다.

 

 전역 패키지

npm install package -global 글로벌 옵션을 통해 내려받아, 패키지는 전역 패키지 저장소에 저장이 된다.

node_modules 디렉터리에 패키지를 저장하기 위해서는 -global 옵션을 제외하고 사용해야한다.

 

전역 패키지 또한 프로젝트에 호출하여 사용할수있으나 프로젝트 의존성을 package.json 내에 명시하지 않고 사용하게 된다면 프로젝트를 관리하는데 있어서 좋지 않은 영향을 끼칠수 있다.

 

프로젝트 내에서 사용하는 패키지는 package.json 내에 명시적으로 선언하여 프로젝트를 관리한다.

 

⚙️ 의존성 삭제하기

npm remove [package-name]

의존성 패키지를 삭제할 수 있다.

package.json의 dependencies와 devDependencies에서 삭제하고 node_modules에서 다운로드 받아있는 패키지도 삭제가된다.

 

cowsay 모듈이 삭제가 되면 package.json의 devDependencies가 삭제되고 node_modules 안에 cowsay 패키지 뿐만 아니라 cowsay에 의존하고 있던 다른 패키지들도 전부 삭제 되었다.

📝 스크립트 실행하기

스크립트란 간단한 동작을 수행하는 코드이다. npm에서 스크립트를 실행하는 방법은 package.json의 scripts에 선언된 스크립트를 npm run [script-name]명령어로 실행할수 있다.

  • package.json: "say-hi":"cow \ "HI\"" 스크립트를 추가한다.
  • 실행: npm run say-hi

 

📕 npm script를 사용하는 이유

npm script 내에선 의존성 패키지를 사용할 수있다. 주로 의존성 패키지들 중에는 유닛테스트 패키지들이 있는데, 유닛테스트 패키지들을 node_modules에 다운로드 되어 있는 실행파일을 실행하는 것이 아니라 node_modules에 모듈을 직접적으로 호출해서 사용할수 있기 때문이다.

📕 자주 사용되는 스크립트

npm 스크립트엔 run을 제외하고 사용할 수 있는 주요 스크립트들이 있다.

npm test	// 코드 유닛 테스트 등에 사용
npm start	// 프로젝트 실행
npm stop	// 프로젝트 종료

원래는 npm run test, npm run start, npm run stop 을 실행하는 코드인데, run을 제외하고 사용할 수 있을 뿐 npm 내부적으로 코드를 제공해 주는 것은 아니다.

 

📋 NPM 요약

명령어 npm init 프로젝트 생성
npm install 의존성 추가
npm remove 의존성 삭제
npm run package.json 파일의 script 실행
주요
파일 / 디렉터리
node_modules 프로젝트 의존성 저장 디렉터리
package.json 프로젝트 관리 (버전, 의존성, 스크립트, ...)
package-lock.json 의존성 버전 확인

 

'Frontend Develop > Node.js' 카테고리의 다른 글

[node] node.js 란?  (1) 2023.11.22
node.js 모듈  (0) 2023.06.20
Node.js 기초 이해하기 - 싱글쓰레드, 비동기, 이벤트  (0) 2023.06.19