최근 Anaconda 환경을 자주 사용했다. conda를 사용하면서 환경관리의 편리함에 놀라고 있었는데 NPM이란 녀석을 사용하다보니 이녀석도 아주 편리한 것이 아니겠는가? 그런 이유로 NPM이라는 녀석을 조금 더 자세히 살펴보고자 한다. 물론 NodeJS로 프로젝트를 진행한 것이 이번이 처음이 아니다. 그것이 더 문제이다. NPM을 모르고 NodeJS를 사용했다니.. 이제는 NPM을 알고 NodeJS를 사용하자.
NPM는 Node Package Manager의 약자이다. 자바스크립트 패키지 매니저이고 NodeJS에서 사용할 수 있는 모듈들을 패키지화하여 모아둔 저장소 역할을 하며 설치/관리를 수행할 수 있는 CLI를 제공한다.
npm i <패키지명>
명령어로 손쉽게 패키지가 설치된다. 설치에는 local install과 global install이 있다. 기본값은 local install이고 local package는 해당 프로젝트 내에서만 사용할 수 있다.
npm i -g <패키지명>
명령어로 global install을 할 수 있다. global package는 모든 프로젝트에서 곹옹으로 사용할 수 있다. global packge install path는 다음과 같다.
NodeJS를 자주 다룬 친구가 그러더라
야! NodeJS에 없는거 없다고 했지?!
그 친구 말마따나 없는거 빼고 다 있는 NodeJS이니만큼 프로젝트에서는 아주 많은 패키지를 사용하게 된다. 또 패키지들의 버전이 빈번하게 업데이트되므로 프로젝트가 의존하고 있는 패키지들이 관리될 필요가 있다. npm에서는 package.json
파일로 프로젝트의 정보와 패키지들의 의존성을 관리한다.
package.json
에는 사용하고 있는 패키지들의 명세가 작성되어 있기 때문에 프로젝트를 다른 사람에게 공유하고 싶다면 package.json을 공유하여 개발 환경을 빠르게 구축할 수 있다. JAVA에서는 Maven의 pom.xml과 비슷한 역할을 한다고 한다.
package.json은 프로젝트 루트에서 npm init -y
명령어로 생성할 수 있다. 방금 명령어로 생성한 파일은 아니지만 개발중인 사오정 서버 프로젝트의 package.json
을 살펴보자
{
"name": "saojeong-service",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www"
},
"dependencies": {
"@sentry/node": "^5.19.2",
"cookie-parser": "~1.4.4",
"debug": "~2.6.9",
"dotenv": "^8.2.0",
"eslint-config-airbnb-base": "^14.2.0",
"eslint-plugin-import": "^2.22.0",
"express": "~4.16.1",
"faker": "^4.1.0",
"hbs": "^4.1.1",
"http-errors": "~1.6.3",
"mariadb": "^2.4.2",
"method-override": "^3.0.0",
"morgan": "~1.9.1"
},
"devDependencies": {
"eslint": "^7.5.0",
"eslint-config-prettier": "^6.11.0",
"eslint-plugin-prettier": "^3.1.4",
"mysql2": "^2.1.0",
"prettier": "^2.0.5"
}
}
package.json
에서 name
과 version
은 생략할 수 없다. dependencies
에는 프로젝트가 의존하는 패키지들의 이름과 버전을 명시한다. 패키지에서 사용하는 패키지들을 말한다. NPM@5부터는 --save가 기본 옵션이라고 한다.npm i <패키지명>
으로 패키지를 설치하면 dependencies
에 명시되지 않는다. dependencies
에 명시하려면 npm i --save <패키지명>
을 사용하자.
devDependencies
에서는 개발 단계에서만 사용하는 패키지를 명시한다. npm i --save-dev <패키지명>
으로 설치하면 된다.
만약 내가 Git을 통해 프로젝트를 배포받았다면 프로젝트 루트에서 npm i
를 입력해야 프로젝트가 정상적으로 동작한다. 패키지 파일들은 모두 gitignore
당하기 때문에 package.json
에 명시된 dependencies
를 보고 새로 설치해야한다.
NPM은 버전관리도 아주 편리하게 할 수 있도록 돕는다고 한다. 버전관리에 대한 부분은 나중에 필요해지면 다시 와서 공부하자 지금은 npm i
와 npm i --save
의 차이에 대해서 알았으니 그걸로 만족한다.
감사합니다. 제가 하는 공부 블로그 내용에 약간 수정에서 써도 되겠는지요?