계발하는 개발자

[Node.js] npm install 옵션 - 이제 더는 헷갈리지 말자 본문

⚒ Backend/Node.js

[Node.js] npm install 옵션 - 이제 더는 헷갈리지 말자

dev_genie 2023. 8. 31. 03:04

여러 강좌나 문서들을 보다 보면 npm install에 -D나 --save-dev 등 여러 접미어가 붙은 걸 간혹 볼 수 있다.

-g 정도만 해도 아 전역으로 설치하겠단 거구나 하고 알겠는데 그외 다른 옵션들은 이게뭐지..?무슨 차이지?🙄 싶어진다.

너무 많은 install 옵션들이 있지만 오늘은 그중에서도 (내 기준) 자주 쓰이는듯한 옵션들만 추려서 정리해보려 한다.

먼저 npm의 플래그에 대해 알아보자.

 

npm에서 플래그란?

npm에서 플래그(Flag)란, 특정한 옵션 또는 설정을 전달하기 위해 npm 명령어와 함께 사용되는 특별한 인자(argument)다.

한 마디로, 우리가 터미널에 입력하는 명령의 옵션이 바로 플래그다.

 

일반적으로 플래그는 "-" 또는 "--" 로 시작하며, 다양한 옵션을 지정할 수 있다.

npm에서는 다양한 플래그를 제공하여, 사용자가 자신의 개발 환경에 필요한 설정을 유연하게 조정할 수 있도록 지원한다.이러한 플래그를 사용하면 패키지 설치, 업데이트, 삭제 등의 작업을 더욱 쉽고 효율적으로 할 수 있다.

 

플래그 종류 (특정 패키지 설치할 경우)

1. -D (--save-dev 플래그)

-D 옵션을 추가한 경우 devDependencies에 패키지들이 추가된다.

이 경우, --production 옵션을 추가하여 배포할 프로젝트를 빌드할 때, devDependencies에 있는 패키지들은 포함되지 않는다.

 

---------- ❓ devDependencies와 dependencies의 차이 ? ---------

1. dependencies : 실제 코드에도 포함되며, 앱 구동을 위해 필요한 의존성 파일들

2. devDependencies : 실제 코드에 포함되지 않고, 개발 단계에만 필요한 의존성 파일들

------------------------------------------------------------------------------

 

2. -g (--global 플래그)

$ npm install (패키지명)은 현재 프로젝트의 폴더에 있는 'node_modules' 디렉토리에 패키지를 설치한다.

또한 프로젝트의 package.json 파일에 의존성 정보가 기록되어, 추후 동일한 환경에서 프로젝트를 실행할 때 같은 버전의 패키지가 사용된다. 

반면, $ npm install -g (패키지명)은 시스템 전역에 패키지를 설치한다는 차이가 있다.

이렇게 전역에 설치된 패키지는 모든 프로젝트에서 사용 가능하며, 'node_modules' 디렉토리와는 관계없이 어디서든 사용할 수 있다.

이 패키지들은 프로젝트의 의존성으로 기록되지 않으며, 시스템의 특정 폴더에 설치된다. 
다만, 이렇게 설치된 시스템 전역 패키지들은 프로젝트 간에 버전 충돌 문제가 발생할 수 있어서 주의가 필요하다!!

 

 

3. -P (--save-prod 플래그)

-P, --save-prod 플래그는 사용하는 걸 많이 못 봤다.

찾아보면 그도 그럴 게, -P 플래그의 기능이 기본 $ npm intall (프로젝트)와 동일하기 때문이란다.

때문에 -P 플래그는 패키지를 설치한 후 프로젝트의 dependencies 목록에 추가한다.

 

4. 의존성 패키지 설치할 경우

패키지명을 붙이지 않고 $ npm install 만을 실행하게 되면,

프로젝트의 package.json 에 기록된 모든 의존성 패키지들을 내려받게 된다. 

가령 아래와 같이 package.json 파일에 의존성이 정의되어 있다고 한다면,

{
  "dependencies": {
    "lodash": "^4.17.21",
    "axios": "^0.21.1"
  },
  "devDependencies": {
    "jest": "^27.3.1",
    "eslint": "^7.32.0"
  }
}

위와 같이 정의된 의존성 정보를 기반으로 프로젝트 디렉토리에서 $ npm install 명령어를 실행하면 

위 파일에 포함된 axios, jest, eslint 패키지들이 자동으로 설치된다.

 

결론

위 경우처럼 플래그 없이 npm install만 사용해도 실행은 되지만,

플래그를 사용해 dependencies 와 devDependencies 로 의존성 목록을 구분하면 “이건 개발용, 이건 실제 서비스용” 으로 구분하기 쉬워진다는 면에서 개발자들에게 꼭 필요한 기능이라고 볼 수 있겠다.😌

LIST
profile

dev_genie

@dev_genie

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!