기존의
npm install 목적
은 node_modules 내에 패키지를 설치 후 어떠한 dependencies에도 목적이 추가되지 않았었다.
현재는 npm 5버전 이후부터는 npm install만 적어도 dependencies에 추가가 된다(현재 최신은 6.xx 버전이다).
=> 즉,npm install
과npm install --save
가 같다는 의미이다.
(어쩐지npm install crawler
만 해도 dependency에 업데이트가 되더라)
npm install --save : package.json의 "dependencies"
부분에 설치된다.
npm install --save-dev : package.json의 "devDependencies"
부분에 설치된다.
"dependencies"
프로덕션 환경에서 응용 프로그램에 필요한 패키지.
내가 packaging한 module을 다른 사람들이 다운받아서 활용할 때
설치가 필요한 library 모음
"devDependencies"
로컬 개발 및 테스트에만 필요한 패키지.
개발단계에서만 사용하는 패키지들
ex) eslint(코드 가독성 높여주는 역할), webpack
해당 명령어를 통해서 package.json 파일이 만들어진다.
해당 명령어를 통해서 package.lock.json 파일이 만들어진다.
npm init
이후 npm install
을 해야한다.npm 패키지들을 관리하는 파일
개발할 때 엄청 크고 무거운 node-modules를 공유할 필요 없이 package.json만 공유하면 동일한 환경에서 작업할 수 있다.
(실제로 압축된 파일을 다운받고 npm install하니 기존에 package.json에 있는 ejs를 통해 ejs폴더를 포함한 무거운 파일의 node_modules가 설치되는 것을 확인 했다. )
node_modules 트리나 package.json 파일을 수정하게 되면 자동으로 생성되는 파일
(즉,npm install
과 같이 무엇인가를 설치하여node_module
이나 혹은package.json
에 영향을 끼칠때 작성되는 의존성을 가진다.)
git 저장소에 node.js 프로젝트를 커밋할 때
보통 node_modules 폴더는 부피가 커서 commit에 포함시키지 않습니다.
이 때 package-lock.json 파일은 꼭 함께 커밋을 해주어야 합니다.
다른 팀원이 이 프로젝트를 처음 pull 받아서 npm install 을 했을 때 개발 당시의 동일한 버전의 모듈들이 설치됨을 보장하기 위함
ex) package.json은 패키지의 정보를 담고 있으나 해당 ^4.16.4
라면 버전이 달라지고 이는 에러를 야기한다.
즉, node_modules나 package.json이 변경되면 이를 적용하는 역할을 하는 package.lock.json은 필수적이다.
ex) package.json 파일의 의존성 선언에는 version range가 사용됩니다. version range란 특정 버전이 아니라 버전의 범위를 의미합니다.
가장 흔한 예로 npm install express를 실행하게 되면 package.json 파일에는 “^4.16.3”(Caret Ranges)로 버전 범위가 추가됩니다.
쓴이는 기존에 nodemon에서 2.0.12에서 발생한 문제가 2.0.7에서 문제가 해결되는 것을 확인 했다.
즉, 같은 전반적으로 버전의 범위를 포함하는package.json
에 추가적으로 정확한 부분까지 영향을 받는package.lock.json
이 필요했다.
nodemon 버전 에러
새로운 폴더이다.
npm init을 통해 package.json생성
npm install을 통해 package.lock.json 생성
다른 사람의 git코드에서 package.json을 받아왔다 가정(복사)
다른 사람의 git코드에서 package.lock.json을 받아왔다 가정(복사)
npm install 명령어 실행시
node_modules
이 새롭게 만들어지는 것을 알 수 있다.
서로간의 버전 문제를 해결하면서 무거운 node_modules를 git에 올릴 필요 없이
package.json의"dependencies"
에 필요한 역할을 하는 프레임워크가 존재하고
ex) express , crawler
package.lock.json의 내용들로 필요한
node_modules
를npm install
명령어를 통해package.json
이 기존에서 수정되었으므로
다시 package.lock.json 안에있는 내용들이node_modules
를 새롭게 생성해준다. (기존 내용이 있다면 업데이트 부분만 업데이트 해준다.)
멘토님 : 실제 프로젝트는 node버전을 올리면 에러가 나는 예외적인 경우가 발생할 수 있어서
프로젝트에 따라 최적화된 버전이 있어요
그렇다면 프로젝트를 여러개 관리를 하는 입장에서는 그 버전에 따라 맞춰서 개발을 진행해야 하는 경우가 발생하는데
그때마다 내 컴퓨터의 버전을 다운그레이드 했다가 업그레이드 했다가 할 수는 없으니까
해당 패키지를 사용합니다
dependencies와 devDependencies 차이
package-lock.json 파일은 무엇인가?
package.json 파헤치기
package-lock.json은 왜 필요할까?
package-lock.json 에 관하여